无法端口转发到虚拟主机?

无法端口转发到虚拟主机?

我有一个相当不寻常的网络设置。它从互联网上的 vps 开始。使用多年,从未出现过连接问题。在它上面,我安装了我的 ip-networkstack-in-userspace (从现在开始为“MyIP”;它已经在互联网上的其他地方运行,提供 sip 和 http,所以它可以工作,至少对于基础知识来说足够好)。

现在我想将通过 vps 上的 eth0 传入的任何 UDP 端口 161 流量重定向到虚拟网络接口。由于某种原因,通常的 iptables 规则不起作用; tcpdump 显示虚拟接口上没有流量,并且 ip 堆栈(“MyIP”)也没有显示接收任何内容的迹象(甚至没有 ARP)。

internet -> vps[eth0, 37.34.63.177] -> vps[myip, 192.168.4.1] -> MyIP[myip, 192.168.4.2]

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0                                   
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161                                                 
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0                                         
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j ACCEPT    
iptables -A INPUT -i eth0 -p udp --destination-port 161 -j ACCEPT                                                                     

现在,如果我在 eth0 上进行 tcpdump,我会看到传入的请求。“myip”网络接口上的 tcpdump 没有显示任何内容。 dmesg 也没有任何内容,并且 iptables -t nat -L -n -v 显示没有增加计数器。

因此,要么无法将数据包转发到虚拟网络接口(这会影响 VPN),要么我的 iptables 规则错误。有人有主意吗?

(不要认为这是 MTU 问题,因为数据包通常小于 200 字节)

答案1

这假设您已经擦除了损坏的规则并处理了 INPUT 链中的 SSH 规则

您的 DNAT 声明应如下所示:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0                      
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161

                                

您的 FORWARD 语句应如下所示:

iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0                         
iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j ACCEPT 

最后允许返回流量:

iptables -A FORWARD -o eth0 -p udp -s 192.168.4.2 --sport 161 -m state --state RELATED,ESTABLISHED -j ACCEPT

DNAT 确实不需要 INPUT 语句来工作

相关内容