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

之前的文章:将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="/c2021/img/data-img.jpg" data-src=172.18.0.4 dst=110.242.68.3 sport=51230 dport=80 src="/c2021/img/data-img.jpg" data-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,从而将数据包发送给客户端。

展开阅读全文

页面更新:2024-05-14

标签:目的   钩子   下图   网关   端口   函数   客户端   红色   状态   规则   常用   两个   目标   地址   文章   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top