IPTABLES NAT 路由到其他服务器的问题

IPTABLES NAT 路由到其他服务器的问题

我的 iptables 有问题。我想将 https 流量路由到其他服务器。我创建了一些 iptables 规则,以便它从我的角度来看应该可以工作,但事实并非如此。所以一定是哪里出了问题。

我有 3 个系统,1. 我的 Windows PC,我尝试通过 Linux 服务器连接到设备服务器。

Linux 服务器是 10.10.11.5 设备服务器是 10.10.11.17

我制定了一些规则:

iptables -t nat -A PREROUTING -i ens192 -p tcp --dport 443 -j DNAT --to 10.10.11.17:443
iptables -A FORWARD -i ens192 -p tcp --dport 443 -d 10.10.11.5 -j ACCEPT
iptables -t nat -A POSTROUTING -o ens192 -p tcp -d 10.10.11.17 -j SNAT --to-source 10.10.11.5

并尝试打开该网站https://10.10.11.5 但什么也没发生。10.10.11.17 正在运行并在 https 上响应。

为了进一步测试我创建了以下规则:

iptables -t nat -A OUTPUT -p tcp  --dport 443  -j DNAT --to-destination 10.10.11.17:443

当我使用 telnet 时,我连接到了另一个系统。如果没有该规则,则没有连接,这是正确的,因为在本地系统上没有任何东西在端口 443 上监听。

为了查看是否使用了预路由规则,我重置了 iptables 上的计数器并尝试通过浏览器进行连接。规则中的计数器计算了一些包。

我不明白为什么该规则没有发挥正确作用。

在设备上,我无法使用 tcpdump 查看是否有任何数据包传入。我尝试捕获 Linux 服务器上发出的数据包,并且每次刷新浏览器时,我都会在 Linux 服务器上获得一些数据包。

tcpdump -i ens192 -n port 443 -vvv
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
08:17:18.381377 IP (tos 0x0, ttl 128, id 17760, offset 0, flags [DF], proto TCP (6), length 52)
    10.10.10.212.50261 > 10.10.11.5.https: Flags [S], cksum 0x3d12 (correct), seq 1461645297, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
08:17:18.381464 IP (tos 0x0, ttl 128, id 17761, offset 0, flags [DF], proto TCP (6), length 52)
    10.10.10.212.50262 > 10.10.11.5.https: Flags [S], cksum 0xe2cf (correct), seq 3258310427, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

所以我认为我的预路由规则没有将正确的 IP 设置到包中。

谢谢大家。

希望我没有忘记任何事情。

莎莎

以下是我的 IPTables NAT 表:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
PREROUTING_direct  all  --  anywhere             anywhere
PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
PREROUTING_ZONES  all  --  anywhere             anywhere
DNAT       tcp  --  anywhere             anywhere             tcp dpt:https to:10.10.11.17:443

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
OUTPUT_direct  all  --  anywhere             anywhere
DNAT       tcp  --  anywhere             anywhere             tcp dpt:https to:10.10.11.17:443

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
POSTROUTING_direct  all  --  anywhere             anywhere
POSTROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
POSTROUTING_ZONES  all  --  anywhere             anywhere
SNAT       tcp  --  anywhere             10.10.11.17          to:10.10.11.5

Chain OUTPUT_direct (1 references)
target     prot opt source               destination

Chain POSTROUTING_ZONES (1 references)
target     prot opt source               destination
POST_public  all  --  anywhere             anywhere            [goto]
POST_public  all  --  anywhere             anywhere            [goto]

Chain POSTROUTING_ZONES_SOURCE (1 references)
target     prot opt source               destination

Chain POSTROUTING_direct (1 references)
target     prot opt source               destination

Chain POST_public (2 references)
target     prot opt source               destination
POST_public_log  all  --  anywhere             anywhere
POST_public_deny  all  --  anywhere             anywhere
POST_public_allow  all  --  anywhere             anywhere

Chain POST_public_allow (1 references)
target     prot opt source               destination

Chain POST_public_deny (1 references)
target     prot opt source               destination

Chain POST_public_log (1 references)
target     prot opt source               destination

Chain PREROUTING_ZONES (1 references)
target     prot opt source               destination
PRE_public  all  --  anywhere             anywhere            [goto]
PRE_public  all  --  anywhere             anywhere            [goto]

Chain PREROUTING_ZONES_SOURCE (1 references)
target     prot opt source               destination

Chain PREROUTING_direct (1 references)
target     prot opt source               destination

Chain PRE_public (2 references)
target     prot opt source               destination
PRE_public_log  all  --  anywhere             anywhere
PRE_public_deny  all  --  anywhere             anywhere
PRE_public_allow  all  --  anywhere             anywhere

Chain PRE_public_allow (1 references)
target     prot opt source               destination

Chain PRE_public_deny (1 references)
target     prot opt source               destination

Chain PRE_public_log (1 references)
target     prot opt source               destination

答案1

此规则:

iptables -A FORWARD -i ens192 -p tcp --dport 443 -d 10.10.11.5 -j ACCEPT

不正确,因为它是在 PREROUTING 表之后处理的,而 FORWARD 表将看到 CHANGED 目标地址。将此规则更改为:

iptables -A FORWARD -i ens192 -p tcp --dport 443 -d 10.10.11.17 -j ACCEPT

上述规则不会涵盖返回数据包,您需要另一条规则:

iptables -A FORWARD -i ens192 -p tcp --sport 443 -s 10.10.11.17 -j ACCEPT

您还可以将这两条规则简化为:

iptables -A FORWARD -i ens192 -p tcp -m conntrack --ctstate ESTABLISHED,DNAT -j ACCEPT

相关内容