前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

NAT

原创
作者头像
zero000
发布2021-08-25 20:57:37
2.6K0
发布2021-08-25 20:57:37
举报
文章被收录于专栏:程序员菜谱

简介

NAT 的全名是 Network Address Translation,字面上的意思是『網路位址的轉換』

NAT 原理

从 iptables 的角度看 NAT 实现的原理

  1. 先經過 NAT table 的 PREROUTING 鏈;
  2. 經由路由判斷確定這個封包是要進入本機與否,若不進入本機,則下一步;
  3. 再經過 Filter table 的 FORWARD 鏈;
  4. 通過 NAT table 的 POSTROUTING 鏈,最後傳送出去。

简言之: PREROUTING(NAT)-> FORWARD(Filter) -> POSTROUTING(NAT)

修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在 iptables 中,SNAT是在出口,也即 POSTROUTING 链发挥作用。

修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在 iptables 中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。

SNAT

SNAT: Source Network Address Translation,是修改网络包源ip地址的。(e.g. LAN主机通过路由器出网)

  • 常用在内网服务需要出公网的场景
image.png
image.png

通过 iptables 配置 SNAT

IP 伪装

代码语言:txt
复制
iptables -A INPUT -i $INIF -j ACCEPT
# 這一行為非必要的,主要的目的是讓內網 LAN 能夠完全的使用 NAT 伺服器資源。
# 其中 $INIF 在本例中為 eth1 介面

echo "1" > /proc/sys/net/ipv4/ip_forward
# 上頭這一行則是在讓你的 Linux 具有 router 的能力

iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
# 這一行最關鍵!就是加入 nat table 封包偽裝!本例中 $innet 是 192.168.100.0/24
# 而 $EXTIF 則是對外介面,本例中為 eth0 

指定 IP SNAT

代码语言:txt
复制
iptables -t nat -A POSTROUTING -o eth0 -j SNAT \
         --to-source 192.168.1.100

指定一个 IP 段

代码语言:txt
复制
iptables -t nat -A POSTROUTING -o eth0 -j SNAT \
         --to-source 192.168.1.210-192.168.1.220

DNAT

DNAT: Destination Network Address Translation, 是修改网络包目的ip地址的。(e.g. 常见的负载均衡 NAT )

DNAT is commonly used to publish a service located in a private network on a publicly accessible IP address.

  • 常用在公网请求转内网服务的场景
image.png
image.png

通过 iptables 配置 SNAT

代码语言:txt
复制
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
      --to 172.31.0.23:80

port 重定向

代码语言:txt
复制
-j REDIRECT --to-ports <port number>
# 這個也挺常見的,基本上,就是進行本機上面 port 的轉換就是了!
# 不過,特別留意的是,這個動作僅能夠在 nat table 的 PREROUTING 以及
# OUTPUT 鏈上面實行而已喔!

範例:將要求與 80 連線的封包轉遞到 8080 這個 port
[root@www ~]# iptables -t nat -A PREROUTING -p tcp  --dport 80 \
> -j REDIRECT --to-ports 8080
# 這玩意最容易在你使用了非正規的 port 來進行某些 well known 的協定,
# 例如使用 8080 這個 port 來啟動 WWW ,但是別人都以 port 80 來連線,
# 所以,你就可以使用上面的方式來將對方對你主機的連線傳遞到 8080 囉!

优劣

使用 NAT 技术有什么优点?

  • 收敛出口 ip
  • 打通内外网,内网服务提供给公网访问

一些不容忽视的问题

  • 网络包都需要经过 NAT ,流量大的时候 NAT 将成为瓶颈
  • 当错误出现时,由于 NAT 转换 ip 的特点,对排查问题带来一定的困难

参考

  1. https://en.wikipedia.org/wiki/Network_address_translation
  2. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/4/html/security_guide/s1-firewall-ipt-fwd
  3. http://linux.vbird.org/linux_server/0250simple_firewall.php#nat
  4. https://www.karlrupp.net/en/computer/nat_tutorial
  5. https://segmentfault.com/q/1010000002389520
  6. https://www.voidking.com/dev-linux-snat/
  7. https://blog.csdn.net/chengqiuming/article/details/78602169
  8. https://blog.csdn.net/chengqiuming/article/details/78602169

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • NAT 原理
  • SNAT
    • 通过 iptables 配置 SNAT
    • DNAT
    • 优劣
    • 参考
    相关产品与服务
    NAT 网关
    NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档