Назад | Перейти на главную страницу

Я не могу получить доступ к своему общедоступному IP-адресу из локальной сети

Я использую Linux-машину с двумя разными подключениями к Интернету в качестве шлюза по умолчанию для локальной сети. Каждое подключение к Интернету имеет свой собственный публичный IP-адрес. Я использовал исходную маршрутизацию с командой «ip rule», чтобы сбалансировать исходящий трафик между этими двумя интернет-соединениями.

eth0 - это локальная сеть. eth1 и ppp0 подключены к Интернету. сама машина linux использует eth1 для подключения к Интернету.

Все работает нормально, за исключением того, что я не могу получить доступ к общедоступному IP-адресу ppp0 из локальной сети:

ping PPP0-PUBLIC-IP #works fine from the linux machine
ping PPP0-PUBLIC-IP #works fine from outside network
ping PPP0-PUBLIC-IP #**fails** from other machines on local network

Также:

$ip rule ls

0:  from all lookup local 
32763:  from x.x.x.x lookup Home 
32765:  from 192.168.0.208/28 lookup Home 
32766:  from all lookup main 
32767:  from all lookup default

$ip route show table local

...
local x.x.x.x dev ppp0  proto kernel  scope host  src x.x.x.x 
...

Где x.x.x.x - публичный IP-адрес ppp0. Что я здесь делаю не так? Почему я не могу пинговать IP-адрес ppp0 pulic из локальной сети, но могу пинговать его из внешней сети?

Обновить: Я использую две команды iptables для настройки NAT. Я не уверен, что это правильный способ, но у меня он работает:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Обновление 2: Когда я пингую общедоступный IP-адрес ppp0 с машины в локальной сети, вывод tcpdump на шлюзе указывает, что пакеты поступают правильно из локальной сети, но кажется, что ядро ​​не доставляет их на уровень приложения.

Вам нужно использовать шпилька NAT в этом сценарии. Обратите внимание, что PCI-DSS запрещает этот тип правила NAT.