ip_forward與路由轉發

1、前言介紹:vim

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

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

2、路由轉發的工做原理:
bash

wKioL1hI896Q9q7IAABV7Z6Rw7o772.png

     

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

服務器

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

 首先保證硬件連通,而後打開系統的轉發功能tcp

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

 一、對於CentOS 6,有三種方法:測試

  第一種:
spa

[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 ~]#   //這種方法我試過,但修改後沒生效。之前兩種爲主吧!

二、對於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 ~]#

4、配置開啓路由轉發功能,實現兩臺不一樣網段的主機實現通訊

實驗環境:

主機  --  系統  --  主機名  --  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
...


驗證成功!

相關文章
相關標籤/搜索