У меня есть сервер, связанный с 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 НАПРАВЛЕНО --to-port 7060
Но это сделает мой сервер доступным через интерфейс WAN, который мне не нравится.
Я чувствую, что это как-то связано с сокетом ipv6 (строка tcp6 в выводе netstat). Все это делается на устройстве Android с помощью специально созданного образа платформы Android.
Как мне заставить это работать?