![smb 端口上的 iptables DNAT 失败,命中 PREROUTING,但未命中 POSTROUTING](https://linux22.com/image/782700/smb%20%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%20iptables%20DNAT%20%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%91%BD%E4%B8%AD%20PREROUTING%EF%BC%8C%E4%BD%86%E6%9C%AA%E5%91%BD%E4%B8%AD%20POSTROUTING.png)
我运行的是 Ubuntu 20.04。它通过将指向本地计算机端口 8080 的 http 请求转发到另一台计算机的端口 80 来正常工作。但是当我设置 iptables 规则以将指向本地计算机的 smb 请求转发到运行 smb 服务器的另一台计算机时,它失败了。只有 PREROUTING 中命中,但没有 POSTROUTING。iptables 命令如下:
sudo iptables -t nat -A PREROUTING -p tcp --match multiport --dports 445,137,138,139 -j DNAT --to-destination 192.168.10.162
sudo iptables -t nat -A POSTROUTING -d 192.168.10.162 -j MASQUERADE
运行 $sudo iptables -t nat -L -v 后,显示以下内容:
Chain PREROUTING (policy ACCEPT 3981 packets, 847K bytes)
pkts bytes target prot opt in out source destination
60 3156 DNAT tcp -- any any anywhere anywhere multiport dports netbios-ns,netbios-dgm,netbios-ssn,microsoft-ds to:192.168.10.162
Chain INPUT (policy ACCEPT 604 packets, 86773 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 57 packets, 4781 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 57 packets, 4781 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any any anywhere 192.168.10.162
Ubuntu 20.04 连接到一台交换机,该交换机连接到另一台 Linux 机器所连接的交换机。我使用连接到与 Ubuntu 20.04 相同的交换机的 Win10 PC 来访问 Ubuntu 20.04。
答案1
很抱歉地告诉大家,我犯了一个低级错误。我忘记在 Linux 机器上启用 IPFORWARD 了。在我运行
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
有用。