5

У меня есть сервер, связанный с 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.

Как мне заставить это работать?

2 ответа2

1

Когда ответные пакеты возвращаются из порта 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.

-1

Я думаю, что вы должны использовать --sport 24 вместо --dport 24 , потому что де-трафик входящий , а не исходящий. Хотя, как сказал Гаррет , вероятно, вы должны использовать ip6tables ...

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