我正在尝试设置 IP 转发。无法让它工作。目标是在接口 1(此接口上的 IP 为 192.168.101.3)端口 4443 上接收连接,并通过接口 2 将其发送到 IP 192.168.4.5(目标 IP)端口 4443。
- 我在 /etc/sysctl.conf 中启用了“net.ipv4.ip_forward = 1”
- 在 /etc/default/ufw 中设置 DEFAULT_FORWARD_POLICY="ACCEPT"
- 将其添加到 /etc/ufw/before.rules 中(来自各种教程):
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 4443 -j DNAT --to-destination 192.168.4.5:4443
-A POSTROUTING -o interface2 -j MASQUERADE
COMMIT
我仍然无法连接“nc 192.168.101.3 4443”
- 你觉得有什么不对吗?
- 如果无法在 DNAT 中指定 -o,ufw 如何知道要转发到哪个接口?它不会尝试在接口 1 上转发到 192.168.4.5:4443 吗?
编辑:
192.168.101.1(计算机 1) -> (192.168.101.3, 192.168.4.1)(计算机 2) -> 192.168.4.5(计算机 3)
我现在能得到的最好的信息就是日志中的这个
[ 1177.553749] [UFW AUDIT] IN= OUT=enp6s0 SRC=192.168.101.3 DST=192.168.101.1 LEN=88 TOS=0x00 PREC=0xC0 TTL=64 ID=62781 PROTO=ICMP TYPE=3 CODE=3 [SRC=192.168.101.1 DST=192.168.4.5 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=13975 DF PROTO=TCP SPT=60720 DPT=4445 WINDOW=64240 RES=0x00 SYN URGP=0 ]
因此,如果我理解正确的话,192.168.4.5 上的端口 4443 无法访问,因此 192.168.101.3 会将 ICMP 错误数据包发送回 192.168.101.1(我使用 nc 连接的机器)。这很奇怪,因为如果我尝试直接从 192.168.101.3 连接 nc,它会正常工作...
答案1
正如 Doug 在评论中所说,问题是由于 libvirt 与 iptables 混淆而产生的。
sudo iptables -I LIBVIRT_FWI 1 -i enp6s0 -o virbr0 -p tcp --dport 4445 -d 192.168.4.5 -m state --state NEW -j LOG --log-prefix "PFNEW:" --log-level info
sudo iptables -I LIBVIRT_FWI 2 -i enp6s0 -o virbr0 -p tcp --dport 4445 -d 192.168.4.5 -m state --state NEW -j ACCEPT
应该可以解决问题。使用桥接连接确实是另一种解决方案。