У меня следующая проблема:
Device (eth0)----> SWITCH(trunk)+VLAN120 ---> (PC1)
+VLAN200 ---> (PC2)
Я могу выполнить эхо-запрос с ПК1 на ПК2, которые находятся в разных подсетях, как указано выше: Использование правил NAT в iptables, как показано ниже, поскольку они находятся в разных подсетях
iptables -t nat -A POSTROUTING -o eth0.120 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0.200 -j MASQUERADE
iptables -I FORWARD -i eth0.120 -o eth0.200 -p udp -m udp --dport 5060 -j ACCEPT
iptables -I FORWARD -i eth0.200 -o eth0.120 -p udp -m udp --dport 5060 -j ACCEPT
iptables -A FORWARD -j DROP ---> This drops rest of the traffic.
БЕЗ последнего правила DROP в цепочке FORWARD мне удалось установить SIP-соединение.
Однако, поскольку я добавил правило DROP для исключения другого трафика, я не могу установить SIP-соединение.
Это означает, что есть другие порты, через которые общаются клиент и сервер. В дампе tcp указано 8000, иногда 5435. Этот другой порт меняется каждый раз.
Итак, я прочитал, что шлюз уровня приложения может помочь в решении этой проблемы.
Как я могу использовать ALG с iptables для разрешения динамических портов.
поэтому мне удалось заставить это работать:
Во-первых, NAT не требуется, как предлагает Майкл.
Теперь, чтобы разрешить SIP на порту 5060, я использовал следующие правила:
iptables -D FORWARD -j delegate_forward;
iptables -D FORWARD -j DROP
iptables -I FORWARD -i eth0.120 -o eth0.200 -m state --state RELATED,ESTABLISHED -j ACCEPT;
iptables -I FORWARD -i eth0.200 -o eth0.120 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i eth0.120 -o eth0.200 -p tcp --dport 5060 -m state --state NEW -j ACCEPT;
iptables -I FORWARD -i eth0.200 -o eth0.120 -p tcp --dport 5060 -m state --state NEW -j ACCEPT;
iptables -A FORWARD -i eth0.120 -o eth0.200 -p icmp -j ACCEPT;
iptables -A FORWARD -i eth0.200 -o eth0.120 -p icmp -j ACCEPT;
iptables -A FORWARD -j DROP;
И это работает.