IP 表作为基本代理未按预期运行

IP 表作为基本代理未按预期运行

我正在尝试使用 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 规则,然后立即消失。

我很乐意接受任何关于此不当行为的建议、想法和猜测。谢谢!

答案1

除了设置正确的 iptables 规则外,还需要在内核中启用转发。检查当前设置(默认为禁用):

cat /proc/sys/net/ipv4/ip_forward

如果它已禁用(0),那么可以通过以下方式启用它(非持久性):

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

或(仍然非持久性)通过:

sudo sysctl -w net.ipv4.ip_forward=1

对于持久设置(下次重新启动后),以 sudo 身份编辑文件/etc/sysctl.conf并更改此行:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

对此:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

相关内容