iptables NAT 表不匹配任何内容

iptables NAT 表不匹配任何内容

我正在尝试让在端口 1234 上运行的 TCP 服务看起来像是在端口 81 上运行。我认为以下方法可以做到这一点:

iptables -A PREROUTING -t nat -p tcp --dport 81 -j REDIRECT --to-port 1234

nc -l 1234但是,如果我在一个终端中启动,然后nc 127.0.0.1 81在另一个终端中启动,则无法连接。第二个终端nc立即退出。tcpdump告诉我:

$ sudo tcpdump -i lo -v
tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
07:54:21.628583 IP (tos 0x0, ttl 64, id 60458, offset 0, flags [DF], proto TCP (6), length 60)
    localhost.45729 > localhost.81: Flags [S], cksum 0xfe30 (incorrect -> 0x06a3), seq 4232210875, win 43690, options [mss 65495,sackOK,TS val 755089 ecr 0,nop,wscale 6], length 0
07:54:21.628595 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    localhost.81 > localhost.45729: Flags [R.], cksum 0x98dc (correct), seq 0, ack 4232210876, win 0, length 0

看起来好像尝试了连接,然后立即重置。我看到校验和不正确——这是个问题吗?如果是,我该如何修复?

另一个nc正在监听端口 1234,已验证netstat并尝试直接连接端口 1234,成功。

奇怪的是,似乎根本没有任何东西与 PREROUTING nat 表匹配:

$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:81 redir ports 1234

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 2 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 2 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination         

请注意计数器为 0,尽管我多次尝试与上述情况建立联系nc。现在,我的理解是所有流量都应该通过该PREROUTING链,所以我应该看到一些东西。怎么回事?

答案1

NAT 重定向对来自和到本地主机的流量均不起作用。请尝试从 LAN 上的另一个系统进行操作。

编辑:尝试看看这个问题,它处理让非特权守护进程监听特权端口的问题。第一个答案没有帮助,但下一个答案应该有帮助。

至于告诉你它不起作用是否没有帮助,你完全可以自由地这么认为。不过请注意,我让你知道你没有实现问题,从而节省了你调试 NAT 规则的时间;相反,问题是你无法以你想要的方式做你想做的事情。可能只有 Rusty Russell 可以告诉你为什么它不起作用。

相关内容