21.12.1999, | |
Как подсоединить сеть к Интернету, имея всего один реальный адрес
| |
Это делается с помощью трансляции сетевых адресов - network address translation (NAT). Заключается она в следующем. Допустим, у нас есть внутренняя сеть 192.168.1.0, а провайдер выделил нам один адрес 10.0.0.1. Предположим, мы хотим установить TCP-соединение с адреса 192.168.1.1 и порта 2000 на адрес 10.0.2.1 и порт 80. Для этого мы посылаем TCP-пакет с адресом и портом отправителя 192.168.1.1:2000 и адресом и портом получателя 10.0.2.1:80. При выходе из интерфейса ppp0 адрес и порт отправителя 192.168.1.1:2000 в нашем пакете будет заменен на 10.0.0.1:3000 и информация о данном соединении будет записана в таблицу состояний NAT. Таким образом, каждое соединение будет однозначно идентифицироваться шестью параметрами:
Поэтому когда к нам извне на интерфейс ppp0 придет пакет с 10.0.2.1:80 на 10.0.0.1:3000, мы отранслируем его на 192.168.1.1:2000. Для FreeBSD существует два пакета, делающие NAT - natd и ip-filter. Мы остановимся на первом, поскольку он входит в дистрибутив FreeBSD. Для работы natd необходим файрволл, но эта статья не ставит своей целью описание установки файрволла. Поэтому, если у Вас уже стоит файрволл, то здесь Вы найдете инструкции, как прикрутить к нему natd. Если же до Вас еще не дошло, зачем нужен файрволл, то здесь Вы найдете инструкции, как установить файрволл в режиме, когда он ничего не защищает. Сначала необходимо собрать ядро со следующими параметрами: options IPFIREWALL options IPFIREWALL_VERBOSE options "IPFIREWALL_VERBOSE_LIMIT=100" options IPDIVERT Как это сделать, Вы можете прочитать по-английски в FreeBSD Handbook или по-русски на странице Ивана Паскаля. После того, как новое ядро собрано, необходимо изменить в файле /etc/rc.conf строки: | |
firewall_enable="YES" # Set to YES to enable firewall functionality firewall_type="open" # Firewall type (see /etc/rc.firewall) | |
Теперь можно приступить к конфигурации natd. В файл /etc/natd.conf запишем следующее: same_ports yes use_sockets yes redirect_port tcp 192.168.1.5:25 25 redirect_port tcp 192.168.1.6:80 80 Первая строка указывает natd по возможности не менять номер порта. Вторая позволяет работать такими долбанутым протоколам, как FTP и IRC DCC. Две последние строки даны в качестве примера того, как пробрасывать входящие соединения для определённых портов на другие компьютеры. В нашем случае, почтовые соединения будут уходить на 192.168.1.5, а HTTP - на 192.168.1.6. И опять нам необходимо изменить файл /etc/rc.conf, теперь уже для запуска natd: | |
natd_enable="YES" # Enable natd if firewall_enable. natd_interface="ppp0" # Public interface to use with # natd if natd_enable. natd_flags="-f /etc/natd.conf" # Additional flags for natd. | |
После этого можно перегрузить компьютер. При старте системы /etc/rc.network запустит natd следующим образом: natd -f /etc/natd.conf -n ppp0 Поскольку natd указан интерфейс ppp0, то адреса всех пакетов, приходящих с других интерфейсов, он будет транслировать в адрес интерфейса ppp0, то есть, 10.0.0.1. Если провайдер выделил динамический адрес, то в файл /etc/natd.conf добавим параметр dynamic: dynamic yes same_ports yes use_sockets yes redirect_port tcp 192.168.1.5:25 25 redirect_port tcp 192.168.1.6:80 80 и natd будет отслеживать адрес, назначаемый интерфейсу ppp0 и менять трансляцию. |