ip_forward與路由轉發


轉載自  https://blog.51cto.com/13683137989/1880744

 

一、前言介紹:

   IP地址分為公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)負責的,這些IP地址分配給了注冊並向INIC提出申請的組織機構。Private Address屬於非注冊地址,專門為組織內部使用。Private Address是不可能直接用來跟WAN通信的,要么利用幀來通信(FRE幀中繼,HDLC,PPP),要么需要路由的轉發(nat)功能把私有地址轉換為公有地址才行。 

   出於安全考慮,Linux系統默認是禁止數據包轉發的。所謂轉發即當主機擁有多於一塊的網卡時,其中一塊收到數據包,根據數據包的目的ip地址將數據包發往本機另一塊網卡,該網卡根據路由表繼續發送數據包。這通常是路由器所要實現的功能。

二、路由轉發的工作原理: 

wKioL1hI896Q9q7IAABV7Z6Rw7o772.png

      

首先內網主機向外網主機發送數據包,由於內網主機與外網主機不在同一網段,所以數據包暫時發往內網默認網關GIP處理,而本網段的主機對此數據包不做任何回應。由於內網主機的SIP是私有的,禁止在公網使用,所以必須將數據包的SIP修改成公網上的可用IP,這就是網關收到數據包之后首先要做的事情--IP地址轉換。然后網關再把數據包發往外網主機。外網主機收到數據包之后,只認為這是網關發送的請求,並不知道內網主機的存在,更不知道源IP地址是SIP而不是FIP,也沒必要知道,目的主機處理完請求,把回應信息發還給網關的FIP。網關收到后,將目的主機返回的數據包的目標IP即FIP修改為發出請求的內網主機的IP地址即SIP,並根據路由表將其發給內網主機。這就是網關的第二個工作--數據包的路由轉發。內網主機只要查看數據包的DIP與發送請求的SIP相同,就會回應,這就完成了一次請求。 

三、配置Linux系統的IP轉發功能:

 首先保證硬件連通,然后打開系統的轉發功能:

對於CentOS系統,CentOS 6 和 CentOS 7開啟路由轉發的方式有區別:

 1、對於CentOS 6,有三種方法:

  第一種:

[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
 

 第二種:

[root@centos6 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 0 //該行的0改為1即可 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 [root@centos6 ~]# sysctl -p //查看修改結果.
 

 第三種:

[root@centos6 ~]# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 [root@centos6 ~]# //這種方法我試過,但修改后沒生效。以前兩種為主吧!
 

2、對於CentOS7,CentOS 6中的第二種方法不適用,需用如下方法:

[root@CentOS7 ~]# vim /etc/sysctl.d/99-sysctl.conf ... 結尾添加: net.ipv4.ip_forward = 1 :wq [root@CentOS7 ~]# sysctl -p net.ipv4.ip_forward = 1 //查看修改結果. [root@CentOS7 ~]#
 

四、配置開啟路由轉發功能,實現兩台不同網段的主機實現通信

實驗環境:

主機  --  系統  --  主機名  --  ip :

 內網主機 --   CentOS 6.7    --   local_host     --   10.68.7.234

 外網主機   --   CentOS 6.7     --   pub_host      --   192.168.1.201

 網關主機   --    CentOS 7.1    --   gateway        --   內網ip:10.68.7.107 --外網ip:192.168.1.200

 

 

相關配置如下:

首先開啟網關服務器的路由轉發功能:

[root@gateway ~]# sysctl -p net.ipv4.ip_forward = 1 [root@gateway ~]#
 

在內網主機配置到內網網關的默認路由:

[root@local_host ~]# route add default gw 10.68.7.107
 

在外網主機配置到外網網關的默認路由:

[root@pub_host ~]# route add default gw 192.168.1.200
 

通過ping測試連通性:

[root@local_host ~]# ping 192.168.1.201 PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data. 64 bytes from 192.168.1.201: icmp_seq=1 ttl=63 time=0.742 ms 64 bytes from 192.168.1.201: icmp_seq=2 ttl=63 time=1.38 ms 64 bytes from 192.168.1.201: icmp_seq=3 ttl=63 time=2.64 ms 64 bytes from 192.168.1.201: icmp_seq=4 ttl=63 time=2.06 ms ...
 
[root@pub_host ~]# ping 10.68.7.234 PING 10.68.7.234 (10.68.7.234) 56(84) bytes of data. 64 bytes from 10.68.7.234: icmp_seq=1 ttl=63 time=0.568 ms 64 bytes from 10.68.7.234: icmp_seq=2 ttl=63 time=1.49 ms 64 bytes from 10.68.7.234: icmp_seq=3 ttl=63 time=3.48 ms 64 bytes from 10.68.7.234: icmp_seq=4 ttl=63 time=3.65 ms 64 bytes from 10.68.7.234: icmp_seq=5 ttl=63 time=2.20 ms


免責聲明!

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



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