NAT 的全名是 Network Address Translation,字面上的意思是『網路位址的轉換』
从 iptables 的角度看 NAT 实现的原理
简言之: PREROUTING(NAT)-> FORWARD(Filter) -> POSTROUTING(NAT)
修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在 iptables 中,SNAT是在出口,也即 POSTROUTING 链发挥作用。
修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在 iptables 中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。
SNAT: Source Network Address Translation,是修改网络包源ip地址的。(e.g. LAN主机通过路由器出网)
IP 伪装
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
iptables -t nat -A POSTROUTING -o eth0 -j SNAT \
--to-source 192.168.1.100
指定一个 IP 段
iptables -t nat -A POSTROUTING -o eth0 -j SNAT \
--to-source 192.168.1.210-192.168.1.220
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.
通过 iptables 配置 SNAT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
--to 172.31.0.23:80
port 重定向
-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 技术有什么优点?
一些不容忽视的问题
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。