有个问题你可能忽略了:SNAT 怎么处理回来的包?

有个问题你可能忽略了:SNAT 怎么处理回来的包?之前的文章 将 Linux 做成一个网关 文章中我们通过 iptables 的 SNAT 将 IP 的源地址修改成网关地址 下图展示了 iptables 5 钩子函数和两个常用的表 nat 和 filter

大家好,欢迎来到IT知识分享网。

之前的文章:将Linux做成一个网关 文章中我们通过iptables的SNAT将IP的源地址修改成网关地址。下图展示了iptables 5钩子函数和两个常用的表nat和filter。其中

INPUT :过滤所有目标地址是本机的数据包

FORWARD :过滤所有路过本机的数据包

OUTPUT :过滤所有由本机产生的数据包

PREROUTING :可以在数据包到达时改变目标地址

POSTROUTING :在数据包离开时改变数据包的源地址。

有个问题你可能忽略了:SNAT 怎么处理回来的包?

我们通过SNAT规则将客户端源地址CIP替换成网关地址GIP,但大家有没有意识到一个问题,网络回包的目的地址是啥?由于出去的数据包源地址是网关地址,回来的数据包的目的地址当然也是网关地址GIP。但问题是:我们并没有设置DNAT规则,那么是如何将回来数据包的目的地址重新修改成CIP呢 ?

有个问题你可能忽略了:SNAT 怎么处理回来的包?

绿色:源地址,红色:目标地址

其实,无论是SNAT还是DNAT,他们都附带了一个反向操作。iptables会通过conntrack维护连接状态,这个连接状态非常简单就是维护一个Map映射,将一个连接转到另外一个连接并记录连接状态,下面是一个Demo。

 tcp 6 6 CLOSE src=172.18.0.4 dst=110.242.68.3 sport=51230 dport=80 src=110.242.68.3 dst=172.17.79.163 sport=80 dport=51230 [ASSURED] mark=0 use=1

可以看到状态已经是CLOSE了, 源 172.18.0.4:51230 目标110.242.68.3:80 的这个连接,经过SNAT出去后,这个源地址会替换成GIP 172.17.79.163发送出去,发送的源端口就是51230,等到回来的包目的是172.17.79.163:51230 源是110.242.68.3:80 到达的时候,就可以执行DNAT(UNSANT) 将目的地址改成CIP,从而将数据包发送给客户端。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/164572.html

(0)
上一篇 2024-12-26 17:26
下一篇 2024-12-26 17:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信