smb 端口上的 iptables DNAT 失败,命中 PREROUTING,但未命中 POSTROUTING

smb 端口上的 iptables DNAT 失败,命中 PREROUTING,但未命中 POSTROUTING

我运行的是 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"

有用。

相关内容