我正在尝试使用 iptables 在 Ubuntu 14.04 服务器(IP=192.168.36.217)上完成简单的数据包转发。我想在特定端口上接收发往服务器的传入数据包,并将它们重写到新的目标,指定端口(HTTPS)和源 IP 设置为此服务器,源端口设置为 NAT,因此可以反转在返回数据包上。
表 mangle、raw 和 security 是空的。所有表的所有规则都有一个默认值 ACCEPT。我在 PREROUTING 中有 1 个 DNAT 规则,在 POSTROUTING 中有 1 个 SNAT 规则。然后我添加了一些 LOG 规则来检查发生了什么。以下是 nat 和 filter 表的样子:
过滤表
Chain INPUT (policy ACCEPT 249 packets, 15888 bytes)
num pkts bytes target prot opt in out source destination
1 143 8348 LOG tcp -- * * 10.15.4.115 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: INP of interest: "
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 169 packets, 12148 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 LOG tcp -- * * 0.0.0.0/0 45.45.45.45 LOG flags 0 level 4 prefix "l++: filter\OUTPUT : "
nat 表
Chain PREROUTING (policy ACCEPT 2762 packets, 279K bytes)
num pkts bytes target prot opt in out source destination
1 33 1672 LOG tcp -- * * 10.15.4.115 0.0.0.0/0 tcp dpt:65001 LOG flags 0 level 4 prefix "l++: nat PRE "
2 15 760 DNAT tcp -- * * 10.15.4.115 0.0.0.0/0 tcp dpt:65001 to:45.45.45.45:45001
3 0 0 LOG tcp -- * * 10.15.4.115 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: nat PRE BOT"
Chain INPUT (policy ACCEPT 263 packets, 46239 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 LOG all -- * * 10.15.4.115 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: nat INP: "
Chain OUTPUT (policy ACCEPT 60 packets, 4285 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 60 packets, 4285 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 LOG tcp -- * * 10.15.4.115 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: nat POST end: "
2 0 0 SNAT tcp -- * em1 10.15.4.115 0.0.0.0/0 to:192.168.36.217
3 0 0 LOG tcp -- * em1 192.168.36.217 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: nat POST after SNAT: "
4 0 0 LOG tcp -- * em1 10.15.4.115 0.0.0.0/0 LOG flags 0 level 4 prefix "l++: nat POST after SNAT what"
当我测试时(从 10.15.4.115:telnet 192.168.36.217 65001),这就是我在系统消息日志中看到的全部内容:
May 19 15:20:40 LDAP-Proxy kernel: [1891508.926283] l++: nat PRE IN=em1 OUT=
MAC=<omitted> SRC=10.15.4.115 DST=192.168.36.217 LEN=52 TOS=0x00 PREC=0x00
TTL=127 ID=21164 DF PROTO=TCP SPT=59394 DPT=65001 WINDOW=64512 RES=0x00 SYN
URGP=0
我相信我已经将 PREROUTING 规则与 LOG 规则绑定在一起。数据包进入,进入 DNAT 规则并立即消失。
我很乐意收到任何关于这种不当行为的建议、想法和猜测。谢谢!
除了正确的 iptables 规则集外,还需要在内核中启用转发。检查当前设置(默认为禁用):
如果它被禁用(0),那么它可以通过以下方式启用(非持久性):
或(仍然非持久性)通过:
对于持久设置(在下次重新启动后),以 sudo 方式编辑文件
/etc/sysctl.conf
并更改此行:对此: