linux day26(路由實驗)

路由:幫你決定下一條路該往哪走。linux

若是隻是在局域網裏發,須要通過交換機,想要往外發,須要通過路由器。shell

linux內核都集成了路由功能,因此能夠作成一個路由器來使用。當它只是一個linux系統的時候,它會發包,收包,可是不能轉發包。如今要讓它能夠轉發包。vim

 

 操做系統內核佔用的空間就是Kernel space空間(內核空間),應用軟件佔用的空間就是user space空間(用戶空間)。網絡

包先走到網卡,crc沒問題,送到網卡緩衝區,產生硬件中斷,送到操做系統的內核空間,操做系統作一個路由判決,決定送到哪,若是ip是本身,就送到用戶空間,根據端口送到對應的應用程序,若是應用程序只是單純的收包,就結束,若是應用程序產生數據要反饋給別人,應用程序沒法調網卡,因此會把數據包送到內核,內核要再次作路由判決,分析目標究竟是誰。ssh

 

 

route -n(路由表)優化

 

 第一列是目標ip     網站

第二列指定網關,若是指定了,直接發,沒有指定就是廣播。 ui

第三列,子網掩碼spa

第四列,ug表明指定網關,去往172.16.0.0經歷多少設備,多少跳,操作系統

第五列,端口的意思,意思是從哪一個端口發出去的。

 

  結合路由表,收包流程:

      數據包送到機器後,這個包先被分析到三層,看目標地址是否是在路由表內,若是發現是本機地址,那麼往用戶空間送,若是應用程序給反饋數據,那麼在往內核空間送,再進行一次路由判決,內核調網卡發,仍是對照路由表。

 

  可是linux系統也能夠單純當作一個路由器來用,只是轉發,而不是放到用戶空間內,那就須要開啓路由轉發功能。今天主要講路由轉發功能。

  倆種方式開啓路由轉發功能。

  方式1:

    echo 1 > /proc/sys/net/ipv4/ip_forward

   方式2:

    sysctl -w net.ipv4.ip_forward=1

   這倆都是臨時開啓,若要永久生效,應該寫入配置文件。

  方式3:永久開啓

    vim /etc/sysctl.conf

    在最後一行輸入:net.ipv4.ip_forward=1

    sysctl -p 就能使配置文件馬上生效

  sysctl -a | grep ip_forword 查看是否生效。

 一臺linux主機能當路由器,必須知足三個條件。

  1,必須開啓路由轉發功能。

  2,其次它要把網關指向我,平時網關都是指向路由器,因此路由器再能給它轉發,現想讓我幫它轉發,就須要把網關指向我。   

  3,該linux主機必須有對應的路由轉發條目

  假如主機1,ip是192/.168.12.46/24 , 主機2 ip192.168.12.42/24 這是倆是鏈接在一個交換機上,同時主機2,還有一塊網卡鏈接另外一臺交換機,ip 172.16.10.24/24 ,這時候主機1網卡,是能夠ping通,172.16.10.24/24 的,由於當數據進入內核,進行路由判決,發現目標是本身,對的上路由策略,就能夠ping通。能收包回包,一切都取決於路由策略,也就是路由表。下面詳細講解。

  轉發是linux內核的功能。

  

6,路由分爲三種

    1,主機路由,子網掩碼設置成32位,直接把範圍縮小到最小,就一個地址。(由於假如是24位子網掩碼,一個網絡裏有253個主機位,子網掩碼越大,網絡越多,主機數越少。)

     route add -host 172.16.13.11/32 dev eth0

    2,網絡路由,子網掩碼不足32位,所包含的地址是一個範圍,子網掩碼越大容納的範圍越小。

     route add -net 172.16.11.0/24 dev eth0

    3,默認路由,目標地址位0.0.0.0/0,所包含的範圍最大的

      route add default dev  eth0

     注意:以上三個都沒有指定網關,就會廣播。若是想加上就須要在子網掩碼後面加上 gw 1.1.1.1/24 dev eht0。

     指定了網關,gw,那麼意思就是經過指定的網關往外轉發,而沒有指定,就是在本身局域網內廣播。

     刪除一條路由條目:

      route del  -host 172.16.13.11/32 dev eth0(也就是把添加的add,改爲del,刪除的時候要看刪除的路由條目的類型是什麼。)

    路由的優先級,越精確優先級越高,首先對目標ip有沒有,若是好幾個都涵蓋了, 那麼看子網掩碼,子網掩碼越大,越精確。

     範圍從大到小:默認路由>網絡路由>主機路由,

     精確和優先度:主機路由>網絡路由>默認路由,若是主機路由(也就是32位子網掩碼的)和網絡路由(不到32位子網掩碼的)沒有對應的路由條目,那麼由默認路由兜底,也就是目標0.0.0.0/0 默認地址通常都指定了網關,不加網關也行,可是一般都搭配網關,就好比如今給百度發包,ping百度網站,能夠ping通,而路由條目裏其實根本沒有百度的ip地址,靠的就是默認路由,指定網關後,靠網關往外發數據包。

 

開始作實驗。

 

 

 

 首先添加虛擬網絡,4個,子網ip和上面vmnet同樣,子網掩碼24,dhcp都是2-254

而後建立四個虛擬機,都執行這些命令,iptables -F setenforce 0 systemctl stop NetworkManager。。1號機器去掉第二塊網卡,eth0鏈接到虛擬網卡1,2號機器,1.1.1.2連到虛擬網卡1,2.2.2.2鏈接到虛擬網卡2,以此類推。

而後修改虛擬機的eth0的ip地址,ifconfig eth0 1.1.1.8,以此類推,每一個虛擬機的eth0都改爲左側地址。

而後打開xshell,打開四個窗口,分別使用ssh root@1.1.1.8連上,以此類推都連上。

首先把每一個打開的xshell窗口,輸入systemctl stop firewalld , setenforce 0 ,關閉防火牆,作項目的基礎。

而後把ip地址都改爲靜態ip地址,cd /etc/sysconfig/network-scripts/ ,vim ifcfg-eth0,修改固定ip地址爲1.1.1.8,子網掩碼24,網關刪除,dns都刪除uuid也刪除。而後執行systemctl restart network,重啓配置文件,也會重啓eth1,可是由於eth1被移除,因此報錯,這時候執行,mv ifcfg-eth1 ifcfg-eth1.bak,而後執行systemctl restart network。其餘機器也是以此類推。      注:sysetmctl status Networkanager 關閉網絡服務。

     所有配置好

查看每一個虛擬機的路由表信息,route -n,會發現每配一個ip地址,路由表就以這個ip地址所在網段加一條網絡路由,用來給本身網段的進行通訊。第一臺虛擬機加一條,由於只配一個網卡,其餘都是本身加了兩個對應網段的網絡路由條目。

 

  提需求。(看網絡拓撲)

  首先虛擬機1號,ping虛擬機2號1.1.1.2,成功,說明他們能夠互通,緣由就是虛擬機1號的路由條目裏,有1.1.1.0/24,沒有指定網關,就說明沒有指定ip來作後續的轉發,那就等於從eth0出去,到交換機(虛擬網卡1)內,而後交換機廣播,虛擬機2號收到。(正常來講,先匹配目標的ip,看看都有誰涵蓋它,而後再看子網掩碼,來判斷它們的優先級,這裏只有一個因此不須要比對)  

  拓展:1.1.1.8和1.1.1.2是一個網段的,可是若是刪除了1.1.1.8這臺機器的1.1.1.0的路由條目,route del -net 1.1.1.0/24 ,這樣即便1.1.1.8和1.1.1.2是一個網段的,鏈接在一個交換機上,也沒法ping通。(若是把1.1.1.2這臺機器的1.1.1.0路由條目刪除掉,那麼1.1.1.8,ping1.1.1.2,包能夠出去,可是回不來了)

  1.1.1.8 ping 2.2.2.2 是ping不通,由於路由條目沒有2.2.2.0/24,加上route add -net 2.2.2.0/24 dev eth0 ,這裏沒有指定別人幫它轉發,那就是廣播,而後1.1.1.8就能夠ping通2.2.2.2,緣由是2.2.2.2機器的路由條目有1.1.1.0/24,爲何有,由於設置2號主機的eth0網卡是1.1.1.2,默認就本身生成了1.1.1.0/24這個路由條目,因此只須要1.1.1.8機器添加一條2.2.2.0/24 dev eth0就能夠成功。

  如今1.1.1.8能不能ping通2.2.2.3,不能,由於雖然路由條目有2.2.2.0/24可是虛擬機2號,不會幫你轉發,首先須要開啓轉發功能   echo 1 > /proc/sys/net/ipv4/ip_forward ,目前能夠送包,不能回包,那就說明虛擬機3沒有1.1.1.0/24這個路由條目,route add -net 1.1.1.0/24 dev eth0 ,而後仍是ping不通,由於虛擬機1和虛擬機3沒有直接鏈接在一個交換機上,這時候須要中間的虛擬機2來充當路由器,目前虛擬機具有路由器轉發功能的,3個其中的2個,有對應的路由條目,開啓了轉發功能,就差一個,就是沒有把虛擬機2指定成網關,先把舊的沒有指定網關的2.2.2.0/24 刪除,route del -net 2.2.2.0/24 ,而後再添加指定網關的 route add -net 2.2.2.0/24 gw 1.1.1.2 dev eth0 (這裏爲何不指定2.2.2.2,由於就像現實裏,指定網關的地址,確定是和本身在一個局域網內的,而不是網關對外的地址,這樣,網關才能幫你轉發數據。)在虛擬機3裏,也把以前的1.1.1.0/24的刪除掉,而後route add -net 1.1.1.0/24 gw 2.2.2.2 dev eth0 而後就能夠ping通了。這裏虛擬機2分別有1.1.1.0和2.2.2.0 這裏不須要設定網關,由於它不須要別人幫它轉發。若是須要,虛擬機2號也能夠指定網關。

  1.1.1.8,ping3.3.3.3 ,首先在虛擬機1加上路由條目,並指定網關,route add -net 3.3.3.0/24 gw 1.1.1.2 dev eth0 而後還須要虛擬機2號擔任轉發功能的,必須有對應路由條目,route add -net 3.3.3.0/24 dev eth1,這裏不須要轉一手,就是給3.3.3.3的,因此不須要指定網關,

 

   小總結:1.1.1.8ping通3.3.3.3,虛擬機1路由條目,須要有3.3.3.0/24 指定網關是1.1.1.2 eth0出去,而後虛擬機2須要的路由條目,3.3.3.3 不須要指定,eth1出去,保證了1.1.1.8給3.3.3.3發包的流程,而後3.3.3.3給1.1.1.8回包,虛擬機3須要有1.1.1.0/24 指定網關是2.2.2.2 eth0,虛擬機2須要有1.1.1.0 不須要指定網關,eth0

 

如今1.1.1.8 ping 1.1.1.2    2.2.2.2     2.2.2.3   3.3.3.3 均可以ping通。

新需求,如今須要1.1.1.8ping 3.3.3.4 虛擬機2,須要讓虛擬機3幫忙轉發一次,才能送到虛擬機4,否則只能到虛擬機3,route add -net 3.3.3.0/24 gw 2.2.2.3 dev eth1,這時候虛擬機3,被當成路由器使用,那麼首先開啓轉發功能,echo 1 > /proc/sys/net/ipv4/ip_forward,目前能夠送的包能夠到了,還須要回的包,就須要設定虛擬機4,route add -net 1.1.1.0/24 gw 3.3.3.3 dev eth0

如今就1.1.1.8 到 3.3.3.4了

 

 

如今1.1.1.8就差4.4.4.3沒有ping通,那麼首先增長路由條目,還須要指定網關進行轉發,route add -net 4.4.4.0/24 gw 1.1.1.2 dev eth0,開始沿途檢查。開始看2號虛擬機,route add -net 4.4.4.0/24 gw 2.2.2.3 dev eth1,而後看3號虛擬機,route add -net 4.4.4.0/24 dev eth1,目前來回都通了。

 

 全通了。。。。指定路由器是怎麼一回事。

 

 

路由優化(路由表進行精簡)

route add default gw 1.1.1.2 dev eth0

就目前這個圖來講,1.1.1.0,他前面不須要別人給它轉發,而其餘的都須要被1.1.1.2的轉發,那麼這個默認路由0.0.0.0指定網關是1.1.1.2能夠匹配2.2.2.0  3.3.3.0  4.4.4.0的均可以匹配上。一條能夠代替它們。route del -net 2.2.2.0/24 等等把這是三個都刪除了。

 

 只有網卡配置好,路由條目就會默認設置出來。本段的,沒有網關的,保證能夠訪問同網段的機器,不須要走網關了,直接在廣播域本身轉發就好了。但凡不是本機同網段的,都要進行網關轉發。

  網關轉發條件,必須有網關轉發功能,必須有去往地址的路由條目,還有可能設置網關。

  優化,只留下本機同網段的,其餘網關一樣的所有刪掉,而後route add default gw 1.1.1.2 dev eth0

相關文章
相關標籤/搜索