基於iptables 實現內部路由功能(arm交叉編譯該工具即可實現)
ptables實現NAT路由
NAT路由
一.問題描述 :
主機B充當路由使處在內網中的主機C能通過主機B訪問外網
二.實驗原理:
Nat(Network Address Translation、網絡地址翻譯)表中,也就是用以實現地址轉換和端口轉發功能的這個表,定義了PREROUTING, POSTROUTING,OUTPUT三個鏈:
NAT 的原理 簡單的說就是當內網主機訪問外網時,當內網主機的數據包要通過路由器時,路由器將數據包中的源內網 IP 地址改爲路由器上的公網 IP 地址,同時記錄下該數據包的消息;當外網服務器響應這次由內而外發出的請求或數據交換時,當外網服務器發出的數據包經過路由器時,原本是路由器上的公網 IP 地址被路由器改爲內網 IP ;
如果內網主機訪問外網而經過路由時,源 IP 會發生改變,這種變更行爲就是 SNAT
當外網的數據經過路由發往內網主機時,數據包中的目的 IP (路由器上的公網 IP) 將修改爲內網 IP,這種變更行爲就是 DNAT ;
SNAT 和 DNAT所對應的兩個鏈分別是 POSTROUTING和PREROUTING
POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。
PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的機器。
三.實驗環境:
分類 | 主機B | 主機C |
---|---|---|
IP | ens33:192.168.195.129 | ens33:192.168.232.129 |
ens37:192.168.232.133 | ||
GATEWAY(網關) | 192.168.195.2 | 192.168.232.132 |
DNS | 192.168.195.2 | 192.168.195.2 |
四. 實現NAT路由
1.開啓主機B的路由轉發功能(默認值0是禁止ip轉發,修改爲1即開啓ip轉發功能。)
[root@B~]#echo "1" > /proc/sys/net/ipv4/ip_forward
2.爲主機C添加路由使其能夠到達主機B,並修改DNS使其能對域名解析
[root@C ~]#route add -net 192.168.195.0/24 gw 192.168.232.129
[root@C ~]#vi /etc/resolv.conf #DNS的配置文件
nameserver 192.168.195.2
3.在主機B中添加iptables策略
[root@B~]#iptables -A FORWARD -j DROP
[root@B~]#iptables -t nat -A POSTROUTING -s 192.168.232.0/24 -j SNAT --to-source 192.168.195.129
[root@B~]#iptables -A FORWARD -s 192.168.232.0/24 -j ACCEPT
iptables -A FORWARD -j DROP
拒絕所有的轉發
iptables -t nat -A POSTROUTING -s 192.168.232.0/24 -j SNAT --to-source 192.168.195.129
將192168.232.0/24段的所有都通過192.168.195.129向外發生
iptables -A FORWARD -s 192.168.232.0/24 -j ACCEPT
僅允許轉發192.168.232.0/24段的報文
4.測試
[root@C ~] ping www.qq.com
PING www.qq.com (123.151.137.18) 56(84) bytes of data.
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=1 ttl=128 time=766 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=2 ttl=128 time=4112 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=7 ttl=128 time=31.5 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=8 ttl=128 time=31.0 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=9 ttl=128 time=32.3 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=10 ttl=128 time=32.7 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=11 ttl=128 time=32.2 ms
64 bytes from 123.151.137.18 (123.151.137.18): icmp_seq=12 ttl=128 time=34.1 ms
主機C能夠訪問外網證明此次實驗成功