反射 nat / 发夹 nat 与 iptables

反射 nat / 发夹 nat 与 iptables

我尝试在我的其中一台服务器上实现反射 nat。服务器上有一个虚拟机正在运行,其 IP 为 10.0.0.10。

我的 iptables 如下所示:

root@srv8:~# iptables -t nat -L -n -v --line-numbers
Chain PREROUTING (policy ACCEPT 8 packets, 409 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      426 23387 DNAT       6    --  ens18  *      !10.0.2.0/24          0.0.0.0/0            tcp dpt:80 to:10.0.0.10:80
2     4796  285K DNAT       6    --  ens18  *      !10.0.2.0/24          0.0.0.0/0            tcp dpt:443 to:10.0.0.10:443
3       24  1080 DNAT       6    --  ens18  *      !10.0.2.0/24          0.0.0.0/0            tcp dpt:3000 to:10.0.0.10:3000
4        5   300 DNAT       6    --  vmbr0  *       10.0.0.10            xxx.212.198.74      tcp dpt:80 to:10.0.0.10:80
Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 14 packets, 879 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
Chain POSTROUTING (policy ACCEPT 19 packets, 1176 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1    58631 3639K ts-postrouting  0    --  *      *       0.0.0.0/0            0.0.0.0/0           
2      794 47640 MASQUERADE  0    --  *      ens18   10.0.0.0/24          0.0.0.0/0           
3        0     0 SNAT       6    --  *      vmbr0   10.0.0.10            10.0.0.10            tcp dpt:80 to:100.212.198.74
Chain ts-postrouting (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1       25  1300 MASQUERADE  0    --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x40000/0xff0000

可以看到,有数据包命中了 PREROUTING 规则

Chain PREROUTING (policy ACCEPT 8 packets, 409 bytes)
num   pkts bytes target     prot opt in     out     source               destination      
4        5   300 DNAT       6    --  vmbr0  *       10.0.0.10            100.212.198.74      tcp dpt:80 to:10.0.0.10:80

但由于某些未知原因,POSTROUTING 规则并未受到限制。

Chain POSTROUTING (policy ACCEPT 19 packets, 1176 bytes)
num   pkts bytes target     prot opt in     out     source               destination          
3        0     0 SNAT       6    --  *      vmbr0   10.0.0.10            10.0.0.10            tcp dpt:80 to:xxx.212.198.74

我该如何调试这个问题或者问题出在哪里?

提前致谢,是的,我已经将公开 IP 编辑为随机内容 :)

编辑:在原始版本中,目的地是 100.212.198.74,这意味着是 tailscale ip。这是误导,因为这应该代表任何公共 ip。我现在将其编辑为 xxx.212.198.74,这应该代表公共 ip。但是,是的,服务器上也有 tailscale 在运行。

iptable-save -c 的输出:https://pastebin.com/raw/VLgYVTab

相关内容