Мой сервер (работает на Ubuntu 12.04) находится за NAT и должен иметь доступ к определенной службе, имеющей публичный IP-адрес (64.*.*.*)

Проблема в том, что я не могу получить этот конкретный общедоступный IP-адрес (все другие IP-адреса для той же службы работают; домену назначено несколько IP-адресов). Тот же IP-адрес может быть получен из другой идентичной среды. Сервер NAT (через который я прохожу) также может получить к нему доступ.

Tcpdump на моем сервере показывает только пакеты SYN, в то время как на NAT не отображается трафик, поступающий с моего сервера. IP не заблокирован iptables на сервере NAT. Другой IP для того же сервиса работает нормально.

Схема:

Мой сервер -> Мой NAT -> (Недоступен) Публичный IP

Таблица маршрутизации:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.2.200      0.0.0.0         UG        0 0          0 eth0
10.10.0.0        10.10.2.1        255.255.255.0   UG        0 0          0 eth0
10.10.2.0        0.0.0.0         255.255.254.0   U         0 0          0 eth0
10.10.9.0        0.0.0.0         255.255.255.0   U         0 0          0 eth1

IP-адрес eth0: 10.10.2.51

Я обнаружил (сравнивая MAC-адреса в tcpdumps и просматривая таблицу arp), что вместо того, чтобы идти к моему шлюзу по умолчанию, сервер пытается установить соединение через 10.10.2.1 (но только для этого публичного IP, 64.*.*.*), что меня озадачивает.

1 ответ1

0

Я думаю, что я решил проблему. К сожалению, я не знаю, какую из двух вещей я решил.

Сначала я добавил еще один интерфейс из другой подсети (10.10.8.51), изменил IP-адрес сервера NAT (10.10.8.200) и отправил весь трафик по умолчанию через этот интерфейс.

Во-вторых, я обнаружил, что сервер NAT выполняет перенаправление ICMP, поэтому я отключил прием перенаправлений. Я действительно думаю, что это вызвало мою проблему, но у меня не было времени, чтобы проверить это в постановочной среде.

# sysctl -w net.ipv4.conf.eth2.accept_redirects = 0
# sysctl -w net.ipv4.conf.eth2.send_redirects = 0

# sysctl -w net.ipv6.conf.eth2.accept_redirects = 0
# sysctl -w net.ipv6.conf.eth2.send_redirects = 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .