Я пытаюсь настроить простой брандмауэр с переадресацией портов и не могу заставить работать базовую конфигурацию без брандмауэра. Я настроил сценарий iptables следующим образом
#!/bin/sh
# interfaces
LAN="eth1"
WAN="eth0"
# enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# delete all existing rules to start from scratch
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# accept everything
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -A OUTPUT -j ACCEPT
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.96
# masquerade
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
Этот сценарий не будет использовать брандмауэр, но он должен перенаправить порт 80 на машине шлюза на мою внутреннюю машину 192.168.1.96. Это не работает. Проблема в том, что я не могу попасть снаружи внутрь машины. Даже не знаю, как начать отладку. Есть подсказки, где искать?
Дважды проверьте с помощью iptables -L -n -v --line и -t nat. То, что вы сделали, мне нравится. Также запустите tcpdump, чтобы увидеть, видите ли вы TCP SYN снаружи (eth0) и внутри (eth1), чтобы убедиться, что именно здесь он исчезает.
«Это не работает» - не очень хорошее описание. Что не работает? У вас тайм-аут или отказ в соединении?
Изменить:
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.96
Кому:
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT \
--to-destination 192.168.1.96:80
Я не знаю, какую версию iptables вы используете, но в версии 1.3.5 вам нужно использовать --to-destination вместо --to.
Я думаю, твоя последняя строчка должна быть
# masquerade
iptables -t nat -A POSTROUTING -o $LAN -j MASQUERADE
Обратите внимание на LAN, а не на WAN.
Обычно я настраиваю это с помощью IP-адресов вместо интерфейсов. Пожалуйста, попробуйте следующее:
# port forwarding to local machine
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT --to 192.168.1.96
# masquerade
iptables -t nat -A POSTROUTING -s 192.168.1.96 -j MASQUERADE
и установите $EXT_IP
конечно.