Простейший Nat в linux с помощью iptables
Очень часто бывает нужен простой Nat чтобы дать нескольким другим компьютерам доступ в сеть. Конечно, можно поставить squid или vpn сервер, но зачем, когда можно более просто, и лаконично дать доступ? Этот небольшой пост как раз об этом. Когда я был "мал да зелен", и приобрёл второй компьютер, я зачем-то сразу полез ставить squid. Опыта было мало, а сделать нужно было. В итоге после недели мучений, я это дело бросил. Опыта и знаний явно не хватало. С iptables я тогда был незнаком, поэтому оставил это дело, и решил купить роутер, но тут один знакомый админ со стажем, подсказал мне как легко, и просто можно "раздать" сеть.
Для начала, включим форвардинг в ядре если не включен:
su
echo 1 \> /proc/sys/net/ipv4/ip\_forward
Для того, чтобы ядро загружалось всегда с включенным форвариднгом надо открыть файл /etc/sysctl.conf
(от супер пользователя - root), и в него добавить или изменить имеющуюся строчку:
net.ipv4.ip\_forward=1
Фактически сам nat делается одной командой:
sudo iptables -t nat -I POSTROUTING -s 192.168.8.1 -j MASQUERADE
Этой командой мы делаем "полный nat" для компьютера с адресом 192.168.8.1. Полный в том смысле, что всё, что видит сервер (тот, на котором nat), то видит и клиент. Если компьютеров несколько, и находятся они в одной подсети, то можно указать диапазон адресов с помощью маски:
sudo iptables -t nat -I POSTROUTING -s 192.168.8.0/255.255.255.0 -j MASQUERADE
Маска 255.255.255.0 разрешает 254 адреса (0 в данном случае адрес сети, 255 - broadcast адрес). Т.е. все адреса от 192.168.8.1 до 192.168.8.254. Для расчёта диапазона адресов, рекомендую использовать какой либо из интернет калькуляторов. Например этот.
В случае если сервер видит несколько сетей, а необходимо дать доступ к одной, то это можно сделать так:
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.8.0/255.255.255.0 -j MASQUERADE
На компьютере "клиенте", чтобы появилась сеть, необходимо в качестве шлюза по умолчанию (gateway), указать адрес nat сервера.
Рекомендую использовать этот способ только в домашней локальной сети. В общественной сети легко можно подменить ip адрес.