Linux下配置SNAT上網


局域網有一台主機A,沒有公網的IP, 也就是沒有辦法直接連到互聯網上下載東西,同時內網有另外一台主機B,有公網接入。這個時候為了讓A連接到互聯網,我把B設置成NAT主機,A的網關指向B。
准確的來說,現在的相當於SNAT模式。分析一下數據包流向:

IP信息如下:
A: eth0: 10.122.70.74
B: eth1:10.122.70.65 / eth0:220.220.220.65

發送數據包:

A發送數據包時,B也就是NAT主機,分析數據包表頭,將此數據包轉到可以連接公網的Public IP上去。由於私有IP與公有IP不能互通,B會通過iptables的NAT table內的Postrounting鏈將數據包表頭偽裝成B的公網IP,並且將這兩個不同來源的數據包對應關系寫入暫存內存中,然后將數據包傳送出去。此時傳到互聯網的這個數據包,已經表現為來自公網IP,而非來自局域網。

接收響應包:

當從互聯網把數據響應給A時,會首先進入NAT主機B,B分析數據包的序號,對比剛剛記錄到內存中的數據,由於發現該數據包為后端主機之前傳送出去的,因此在NAT Prerouting鏈中,會將目標IP修改成為后端主機,即A的IP,然后發現目標已經不是本機公網IP,開始通過路由分析,將數據包傳送到B的局域網接口,再傳送到最終目標10.122.70.74上去。

B的設置如下:

#允許接受局域網網卡的數據包,
iptables -I INPUT -i eth1 -j ACCEPT

#開啟路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward

#偽裝數據包
iptables -t nat -A POSTROUTING -s 10.122.70.74 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.122.70.74 -j MASQUERADE

或者用SNAT直接修改IP數據包的表頭來源IP
iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to 10.122.70.74
如果支持多個IP
iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to 10.122.70.74-10.122.70.100

A設置:
vi /etc/sysconfig/network-scripts/ifcfg-eth0

# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.122.70.74
NETMASK=255.255.0.0
GATEWAY=10.122.70.65

===============================================
查看nat表鏈規則
iptables -t nat -L -n

刪除POSTROUTING第一條規則
iptables -t nat -D POSTROUTING 1

 

實例配置:

B主機(172.20.18.102):

cat /etc/sysconfig/iptables

-A POSTROUTING -s 172.20.18.103/32 -j MASQUERADE

 

 

 

A主機(172.20.18.103):

cat ifcfg-eno1
TYPE=Ethernet
BOOTPROTO=static
NAME=eno1
UUID=0f506d06-e9f0-41ed-ae79-a30b8236da4c
DEVICE=eno1
IPADDR=172.20.18.103
NETMASK=255.255.0.0
GATEWAY=172.20.18.102
ONBOOT=yes

 

 

測試網絡連接情況:

ping www.baidu.com
PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=1 ttl=54 time=3.19 ms
64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=2 ttl=54 time=3.17 ms

 

 

參考:http://www.cellmean.com/linux%E4%B8%8B%E9%85%8D%E7%BD%AEsnat%E4%B8%8A%E7%BD%91


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM