5

У меня есть маршрутизатор, в котором я установил систему Linux.

Я хочу, чтобы мой маршрутизатор поддерживал закрепление NAT.

Существует ли такая функция в ядре Linux? Если да, то как его активировать? Есть ли патч, чтобы применить его к моему ядру для поддержки заколки?

Прикрепление объяснения из Википедии:

Let us consider a private network with the following:

    Gateway address: 192.168.0.1
    Host 1: 192.168.0.5
    Host 2: 192.168.0.7

    The gateway has an external IP : 192.0.2.1
    Host 1 runs a P2P application P1 on its port 12345 which is externally mapped to 4444.
    Host 2 runs a P2P application P2 on its port 12345 which is externally mapped to 5555.

If the NAT device supports hairpinning, then P1 application can connect to the P2 application using the external endpoint 192.0.2.1:5555.
If not, the communication will not work.

1 ответ1

1

Как отмечено в комментариях, способ сделать это - создать два правила NAT для обеих внутренних служб, например:

iptables -t nat -A PREROUTING -d public.ip -p tcp --dport 4444 -j DNAT --to inthost1:12345
iptables -t nat -A PREROUTING -d public.ip -p tcp --dport 5555 -j DNAT --to inthost2:12345
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d inthost1 -p tcp --dport 12345 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d inthost2 -p tcp --dport 12345 -j MASQUERADE

Таким образом, если один внутренний хост отправляет пакет другому, он будет выглядеть как "шлюз" (блок NAT), так что блок NAT получает ответ и может переслать его на другой внутренний блок.

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