Я хочу перенаправить внутренний IP-адрес на внешний.
Итак, вот что я делаю:
echo 1 > /proc/sys/net/ipv4/ip_forward
Затем использую iptables:
iptables -t nat -A PREROUTING -s 192.168.1.x -j DNAT --to-destination 95.211.y.z
iptables -t nat -A POSTROUTING -j MASQUERADE
После этого я ожидал достичь сервера по адресу 95.211.y.z, когда пингую 192.168.1.x. Другими словами, я бы ожидал, что весь трафик, направленный на внутренний IP-адрес, будет транслироваться на этот внешний IP-адрес, но этого не происходит.
Где я не прав?
Я предполагаю, что вы имеете в виду, что хотите иметь возможность связаться с хостом в WAN с хостов в вашей LAN, используя адрес в частном IP-пространстве. Если это неверно, то этот ответ может быть бесполезен.
Вам необходимо сопоставить трафик, поступающий на интерфейс LAN, с пунктом назначения, установленным на частный адрес, который вы хотите переназначить (192.168.1.5
). Вам также нужно только MASQUERADE
трафик, выходящий по интерфейсу WAN.
iptables -t nat -A PREROUTING -i ethLAN -d 192.168.1.5 -j DNAT --to-destination 95.211.1.1
iptables -t nat -A POSTROUTING -o ethWAN -j MASQUERADE
Ваша главная ошибка в том, что -s
должно было -d
, но вы также должны указать интерфейсы. Вам также необходимо убедиться, что выбранный вами адрес частного пространства не находится в той же подсети, что и любая сеть в вашей локальной сети. Это необходимо, потому что, если вы используете адрес в той же подсети, исходный хост будет отправлять запросы ARP, а не отправлять пакет по маршруту по умолчанию. Никто не ответит на запросы ARP, и путь, который вы пытаетесь создать, не будет работать.
В этом случае не обязательно, что то, что вы видите, например, в клиенте ICMP, действительно происходит. Соединение DNAT будет работать должным образом, но клиент ICMP будет продолжать показывать вам частный IP-адрес.
Не забудьте также разрешить ответ от целевого сервера вашему клиенту / сети.
http://www.mad-hacking.net/documentation/linux/security/iptables/nat.xml