Linux 內部路由實現及網口轉發之理論篇

基於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能夠訪問外網證明此次實驗成功

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章