天天看點

交換與路由

一.交換與路由

1.什麼是交換
指的是網絡通路, 幾台計算機連在同一個交換機上, 配置同一個網段的不同 IP 就可以直接通信了(這不不談及三層交換機)      

2.什麼是路由

交換與路由

二.Linux處理資料包過程

1.一台Linux主機能夠被當成路由器用的三大前提
至少有兩塊網卡連接配接兩個不同的網段
開啟了路由轉發功能
在該Linux主機上添加了正确的路由規則/政策      

2.過程圖

交換與路由
當外界資料從網卡流入後需要對他進行路由決策
根據其目标決定是流入本機使用者空間
還是在核心空間直接就轉發給其他主機      

3.如果是流入本機使用者空間的資料

則該資料會從核心空間進入到使用者空間,接着被應用程式接收并處理
1. 此時如果本機使用者空間的應用程式不需要産生新的資料, 那便不涉及從某個網卡流出資料
2. 如果本機使用者空間的應用程式需要産生新的資料包對外發送,那便需要從某個網卡流出資料
3. 但在流出之前,也需要做路由決策:根據目标決定從哪個網卡流出
4.如果僅僅是經本機轉發資料包
則必然涉及到從某個網卡流出,此時資料包必須從流入網卡完整地轉發給流出網卡
但Linux主機預設未開啟 ip_ forward 功能, 這使得資料包無法轉發而被丢棄
5.開啟 Linux 主機的路由功能
臨時開啟, 重新開機網絡服務會失效      
🎁方式1
# echo 1 > /proc/sys/net/ipv4/ip_ forward
🎁方式2
# sysctl -W net.ipv4.ip_forward=1      
永久生效, 則寫入配置檔案
🎁CentOS 6中
将"/etc/sysctl.conf"檔案中的 "net.ipv4.ip_forward" 值改為1即可

🎁在"Centos7"中"systemd"管理了很多功能,"sysctl"的配置檔案也分化為多個
"/etc/sysctl.conf"
"/etc/sysctl.d/*.conf"
"/usr/lib/sysctl.d/*.conf"
并且這些檔案中預設都沒有"net.ipv4.ip_forward"項

🎁建議直接寫入"systemd"提供自定義核心修改項的目錄
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
檢視是否開啟了轉發功能
🎁[root@shawn ~]#sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

🎁[root@shawn ~]#cat /proc/sys/net/ipv4/ip_forward
0

🎁[root@shawn ~]#sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
未開啟無法進行通信      
交換與路由
🎁隻有當本機被别人當成網關并且本機開啟路由轉發功能時
🎁别人發來的請求包,本機才會幫忙轉發,這一點很重要,請務必記住
未開啟轉發可 ping 通      
交換與路由
🎁IP位址是屬于核心的(不僅如此,整個tcp/ip協定棧都屬于核心,包括端口号)
🎁隻要能和其中一個位址通信,就能和另一個位址通信,而不需要開啟資料包轉發功能      

三.網關 / 路由

1.Linux 上分為三種路由
主機路由 : 掩碼固定32位, Destination(目的地) 精确到某一台主機
🎁主機路由是直接指明到某台具體的主機怎麼走, 主機路由也就是所謂的靜态路由
網絡路由 : 掩碼小于32位, Destination精确到某一個網段的主機
🎁網絡路由指明到哪一類網絡
預設路由 : 掩碼通常為 0
🎁不走主機路由和網絡路由的, 全部走預設路由
🎁作業系統上設定的預設路由一般也稱為網關
2.路由優先級挑選
若 Linux 上到某主機有多條路由可以選擇, 這時候會挑選優先級高的路由
主機範圍越小, 越精确, 優先級越高 (而決定主機範圍的就是子網路遮罩)
是以掩碼越長, 越精确, 優先級越高
1. 主機路由    #最高
2. 網絡路由    #第二
3. 預設路由    #最低
示例
🎁如果在本機"ping 4.4.4.4"
[root@shawn ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         1.1.1.2         0.0.0.0         UG    0      0        0 ens32
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 ens32
2.2.2.3         1.1.1.2         255.255.255.255 UGH   0      0        0 ens32
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens32

🎁先檢索掩碼長度,然後再對應"Destination"(目的地)
1. 255.255.255.255 ---->2.2.2.3        #發現無法比對
2. 255.255.255.0 ------>1.1.1.0        #無法比對
3. 255.255.0.0 -------->192.134.0.0    #無法比對
4. 0.0.0.0 ------------>0.0.0.0        #能比對

🎁如果檢索到了兩塊網卡網段位址都是"4.4.4.0"(能比對),子網路遮罩長度也相同"255.255.255.0"
🎁但是如果本機直連的是"eth0"網卡,那麼"eth0"對應的那條路由條目優先級高      

四.路由配置指令(臨時)

1.route 指令

常用指令及選項
route [add / del] [-host / -net / default] [ip位址/及掩碼] [gw] [dev]      
add / del 添加或删除路由條目
-host 主機路由
-net  網絡路由
default 預設路由
gw  指定下一跳
dev 強制将路由條目關聯到指定接口, 一般核心會自動判斷
route -n 檢視路由表      

Flags 列所代表的的含義

U (route is up)開啟
H (target is a host) 是一個主機路由
G (user gateway) 設定了下一跳      
🎁添加
# route add -host 10.10.0.125 gw 10.10.0.2

🎁删除
# route del -host 10.10.0.125
添加和删除網絡路由
🎁添加
# route add -net 10.10.0.125 gw 10.10.0.2
# route add -net 10.10.0.125 netmask 255.255.255.0 gw 10.10.0.2
👉如果沒有下一跳,可以直接指定接口也是可以的
# route add -net 10.10.0.0/24 dev eth0

🎁删除
# route del -net 10.10.0.0/24 gw 10.10.0.2
# route del -net 10.10.0.0/24 netmask 255.255.255.0 gw 10.10.0.2
# route del -net 10.10.0.0/24 dev eth0
👉但大多數使用簡短删除方法(偷懶行為)
# route del -net 10.10.0.0/24
添加和删除預設路由
🎁添加
# route add default gw 10.10.0.2

🎁删除
# route del default
# route del default gw 10.10.0.2
👉若有多條預設路由, 後面加上"gw"位址就可以唯一删除指定條目      
1.建立路由配置檔案
/etc/sysconfig/network-script/route-eth3X :3X代表的是接口編号
2.檔案内容格式
DEST via nexthop

[目标位址] [關鍵字] [下一跳位址]

🎁主機路由
"10.10.0.0/32 via 10.10.0.2 dev eth1"

🎁預設路由
"default via 10.10.0.0"
"0.0.0.0/0 via 10.10.0.2"

🎁網絡路由
"10.10.0.0via 10.10.0.2"
配置完畢重新開機生效
3.配置路由注意事項
route-ethXX 的對應網卡配置檔案 ifcfg-ethXX 必須存在,否則路由無效 (注意:對于虛拟機,通常新
添加的網卡都沒有對應的 ifcfg-ethXX 檔案,但 ifconfig 卻能找到該網卡)
如果在檔案中配置永久預設路由,則必須保證所有使用了 DHCP 服務的網卡配置檔案 ifcfg-ethXX 中的 DEFROUTE 指令設定為 "no" ,表示 DHCP 不設定預設路由。
如果在 route-ethXX 檔案中配置永久路由,且該網卡使用了 DHCP 服務配置設定位址,則必須保證該網卡的 ifcfg-ethXX 檔案中的 PEERROUTES 指令設定為 "no" ,表示 DHCP 設定的路由允許被覆寫。      

繼續閱讀