Почему большинство игр не работает с опцией -nat?
Причиной, по которой игры и подобные программы не работают с библиотекой libalias заключается в том, что внешняя машина будет пытаться открыть соединение или посылать (нежданные) UDP пакеты на машину внутренней сети. Программное обеспечение, обеспечивающее опцию -nat, не знает о том, что она должна пересылать эти пакеты машине внутренней сети.
Чтобы это всё же заработало, удостоверьтесь, что единственной запущенной программой является программное обеспечение, с которым вы испытываете проблемы, затем напустите tcpdump на tun-интерфейс маршрутизатора либо включите протоколирование tcp/ip в ppp(8) (set log +tcp/ip) на маршрутизаторе.
Когда вы запустите некорректно работающее программное обеспечение, вы должны увидеть пакеты, проходящие через маршрутизатор. Когда что-то начнёт приходить извне, оно будет отброшено (в этом-то и проблема). Заметьте номер порта получателя этих пакетов, затем завершите работу вашего программного обеспечения. Выполните эту процедуру несколько раз для того, чтобы убедиться, что номер порта постоянен. Если это так, то следующая строчка в соответствующем разделе /etc/ppp/ppp.conf заставит программное обеспечение функционировать нормально:
nat port proto internalmachine:port port
Здесь proto - это tcp либо udp, internalmachine - это машина, которой вы хотите перенаправлять пакеты, и port - это номер порта получателя пакетов.
Несомненно, вы не сможете использовать программное обеспечение на других машинах, не изменяя указанную выше команду, а также запускать программное обеспечение на двух машинах внутри сети одновременно - в конце концов, внешний мир видит всю вашу сеть как единственную машину.
Если номера портов непостоянны, есть ещё три варианта:
Настройте поддержку этого в libalias. Примеры ``особых случаев'' можно найти в /usr/src/lib/libalias/alias_*.c (alias_ftp.c - хорошее начало). Это означает, что вам нужно будет использовать чтение некоторых распознаваемых исходящих пакетов, обнаруживать команды для установления внешней машиной обратной связи на внутреннюю машину на конкретный (случайный) порт и настраивать ``маршрут'' в таблице соответствий так, чтобы последующие пакеты проходили нормально.
Это самое трудоёмкое решение, но оно наилучшее и позволит программному обеспечению работать на нескольких машинах.
Используйте прокси-сервер. Приложение может поддерживать, например, socks5 или (как в случае ``cvsup'') может иметь режим ``passive'', обходящийся без запросов к противоположной стороне на открытие обратного соединения.
Переназначьте всё на внутреннюю машину с помощью команды nat addr. Это решение в лоб.