Почему это правило iptables, которое не работает переадресация портов?
У меня есть сервер, связанный с localhost:7060
, Это использует сокет ipv6 вместо ipv4. Внизу есть netstat outout.
# netstat -an
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.200.32.98:1720 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4122 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4123 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:4123 127.0.0.1:43051 ESTABLISHED
tcp 0 0 10.200.32.98:5555 10.200.32.44:53162 ESTABLISHED
tcp6 0 0 :::5060 :::* LISTEN
tcp6 0 0 ::ffff:127.0.0.1:7060 :::* LISTEN
tcp6 0 0 :::23 :::* LISTEN
tcp6 0 0 ::ffff:10.200.32.98:23 ::ffff:10.200.32.142:43505 ESTABLISHED
tcp6 0 0 ::ffff:127.0.0.1:43051 ::ffff:127.0.0.1:4123 ESTABLISHED
tcp6 0 0 ::ffff:10.200.32.98:23 ::ffff:10.200.32.44:53195 ESTABLISHED
udp6 0 0 :::5060 :::* CLOSE
#
Я хочу настроить правило переадресации портов, которое принимает соединения через порт 24 (для всех интерфейсов loopback, а также eth0) и пересылать данные в localhost:7060
,
Вот как я настраиваю правило iptables:
iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -p tcp --dport 24 -j DNAT --to 127.0.0.1:7060**
Это не работает. Когда я телнет из другой коробки, я вижу следующее
$telnet 10.200.32.98 24
Пытаюсь 10.200.32.98...
Если я изменю сервер для привязки к *:7060
и установить следующее правило, кажется, работает нормально.
iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -p tcp --dport 24 -j НАПРАВЛЕНО - на порт 7060
Но это сделает мой сервер доступным через интерфейс WAN, который мне не нравится.
Я чувствую, что это как-то связано с сокетом ipv6 (строка tcp6 в выводе netstat). Все это делается на устройстве Android с помощью специально созданного образа платформы Android.
Как мне заставить это работать?
2 ответа
Когда ответные пакеты возвращаются из порта 7060 и отправляются в маршрутизатор, эти пакеты также нуждаются в операции маскирования отправителя, чтобы маскировать адрес источника этих пакетов в адрес маршрутизатора (127.0.0.1) и порт как 24. Так что вам нужно добавьте правило SNAP iptables, чтобы оно заработало.
iptables -t nat -A POSTROUTING -p tcp --sport 7060 -j MASQUERADE --to-ports 24
Несмотря на то, что пакеты генерируются локальным хостом, они также попадают в цепочку POSTROUTER. Операция REDIRECT автоматически делает эти две вещи за вас, но если ваша служба находится на другом сервере в вашей локальной сети, вы должны использовать SNAT и DNAT.
Я думаю, что вы должны использовать --sport 24
вместо --dport 24
потому что де трафик входящий, а не исходящий. Хотя, как сказал Гаррет, вероятно, вы должны использовать ip6tables
...