2021-05-12 14:32:11
Linux系統多網絡卡環境下的路由設定
Linux下路由設定命令
1. 新增主機路由
route add -host 192.168.1.11 dev eth0
route add -host 192.168.1.12 gw 192.168.1.1
2. 新增網路路由
route add -net 192.168.1.11 netmask 255.255.255.0 eth0
route add -net 192.168.1.11 netmask 255.255.255.0 gw 192.168.1.1
route add -net 192.168.1.0/24 eth0
route add -net 192.168.1.0/24 gw 192.168.1.1
3. 新增預設閘道器
route add default gw 192.168.1.1
4. 刪除路由
route del -host 192.168.1.11 dev eth0
5. 刪除預設路由
route del default gw 192.168.1.1
Linux下設定永久路由的幾種方式
1. 在/etc/rc.local
裡新增路由資訊
route add -net 192.168.1.0/24 dev eth0
# 或者
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
2. 在/etc/sysconfig/network
裡追加
GATEWAY=[閘道器IP或者閘道器網絡卡名稱]
3. /etc/sysconfig/static-routes
any net 192.168.1.0/24 gw 192.168.1.1
# 或者
any net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
4. 開啟IP轉發
1.臨時開啟
echo "1" > /proc/sys/net/ipv4/ip_forward
2.永久開啟
vim /etc/sysctl.conf
修改net.ipv4.ip_forward=1
實驗:設定雙網絡卡主機同時使用內網和外網
本實驗的背景是筆者在實踐中遇到過的一個問題,本實驗盡量還原當時的網路環境。僅當做一份筆記,同時分享給遇到此問題的同學。
奈何我現在沒有硬體呀(T_T)...只能拿VMware Workstation和eNSP來模擬實驗環境了。
問題背景
如下圖拓撲所示,如果去掉client
節點,內網和外網就是相互隔離的網路。
但是實際情況是,client
節點既需要存取外網資源,又需要存取內網資源,而client
只能設定一條預設路由。如果將預設路由設定在外網網絡卡,client
可以存取172.16.2.0/24
網路的資源和外網的資源,但是其餘內網資源將無法存取;如果將預設路由設定在內網網絡卡,client
雖然可以完全存取內網資源,但是卻不能存取外網資源。
怎麼解決呢?
實驗環境
- VMware Workstation Pro
- 4台最小化安裝的CentOS 7.3虛擬機器
- 華為eNSP模擬器
實驗拓撲
去掉client
節點,內網和外網是隔離的網路。
外網網路為10.0.0.0/16
,代表運營商的接入網;
內網網路為172.16.0.0/16
,代表內網部分(該部分為了安全,不允許對網際網路的直接存取)。
其中:
client
為雙網絡卡的主機,兩網絡卡網段分別為10.0.0.0/16
、172.16.2.0/24
;server2
為172.16.2.0/24
網段的伺服器;server3
為172.16.3.0/24
網段的伺服器;server4
為172.16.4.0/24
網段的伺服器。
網路規劃
IP分配
節點名稱 | IP地址 | 子網掩碼 | 備註 |
---|---|---|---|
client | 10.0.0.101 | 255.255.0.0 | client的外網網絡卡 |
172.16.2.101 | 255.255.255.0 | client的內網網絡卡 | |
Server2 | 172.16.2.11 | 255.255.255.0 | 172.16.2.0/24網段的某台伺服器 |
Server3 | 172.16.3.11 | 255.255.255.0 | 172.16.3.0/24網段的某台伺服器 |
Server4 | 172.16.4.11 | 255.255.255.0 | 172.16.4.0/24網段的某台伺服器 |
內網路由器 | 172.16.2.254 | 255.255.255.0 | 172.16.2.0/24的閘道器 |
172.16.3.254 | 255.255.255.0 | 172.16.3.0/24的閘道器 | |
172.16.4.254 | 255.255.255.0 | 172.16.4.0/24的閘道器 |
虛機網絡卡型別
網路名稱 | VMware網絡卡型別 | 網路範圍 |
---|---|---|
運營商網路 | 橋接 | 10.0.0.0/16 |
VMnet2 | 僅主機 | 172.16.2.0/24 |
VMnet3 | 僅主機 | 172.16.3.0/24 |
VMnet4 | 僅主機 | 172.16.4.0/24 |
內網路由器如何實現呢?
VMnet2、VMnet3、VMnet4均為僅主機模式,那麼常規情況下,只有其網路內的各計算機之間才可以通訊,要怎樣才能實現三個網路間的通訊呢?
答案是使用華為eNSP模擬器中的Cloud。使用Cloud裝置可以將eNSP中的路由器和VMware虛擬機器的網絡卡連線起來。
設定內網環境
設定eNSP的路由器
介面 | IP地址 | 子網掩碼 |
---|---|---|
G0/0/0 | 172.16.2.254 | 255.255.255.0 |
G0/0/1 | 172.16.3.254 | 255.255.255.0 |
G0/0/2 | 172.16.4.254 | 255.255.255.0 |
<huawei>system-view
[huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]ip address 172.16.2.254 255.255.255.0
[Huawei-GigabitEthernet0/0/0]quit
[huawei]int g0/0/1
[Huawei-GigabitEthernet0/0/1]ip address 172.16.3.254 255.255.255.0
[Huawei-GigabitEthernet0/0/1]quit
[huawei]int g0/0/2
[Huawei-GigabitEthernet0/0/2]ip address 172.16.4.254 255.255.255.0
[Huawei-GigabitEthernet0/0/2]quit
[huawei]
修改虛機的IP地址
client
網絡卡名稱 | IP地址 | 子網掩碼 | 預設閘道器 | 備註 |
---|---|---|---|---|
ens33 | 10.0.0.101 | 255.255.0.0 | 10.0.0.1 | 外網網絡卡 |
ens37 | 172.16.2.101 | 255.255.255.0 | 內網網絡卡 |
server2
網絡卡名稱 | IP地址 | 子網掩碼 | 預設閘道器 | 備註 |
---|---|---|---|---|
ens33 | 172.16.2.11 | 255.255.255.0 | 172.16.2.254 |
server3
網絡卡名稱 | IP地址 | 子網掩碼 | 預設閘道器 | 備註 |
---|---|---|---|---|
ens33 | 172.16.3.11 | 255.255.255.0 | 172.16.3.254 |
server4
網絡卡名稱 | IP地址 | 子網掩碼 | 預設閘道器 | 備註 |
---|---|---|---|---|
ens33 | 172.16.4.11 | 255.255.255.0 | 172.16.4.254 |
在server上搭建HTTP服務
以server2
為例:
使用Python建立一個簡單的HTTP服務
cd ~
echo "server2" > index.html
python -m SimpleHTTPServer 8080
對照試驗
在client
上存取外網
ping www.baidu.com -c 4
在client
上存取server2
ping 172.16.2.11 -c 4
在client
上存取server3
ping 172.16.3.11 -c 4
在client
上存取server4
ping 172.16.4.11 -c 4
在對照試驗中可以看到,在client
將預設閘道器設定在外網網絡卡的情況下,雙網絡卡的client
可以正常存取外網和內網的172.16.2.0/24
部分,而172.16.3.0/24
和172.16.4.0/24
是不能存取到的。
為什麼client
能存取172.16.2.0/24
網路,而不能存取172.16.0.0/16
的其餘網路呢?
因為client
位於172.16.2.0/24
網路內,在網路內進行通訊,封包不用傳送至其他網路,當然預設閘道器也就不起作用了。
而當client
與172.16.0.0/16
的其餘網路通訊時,client
的路由表沒有記載發往目的地址的路徑,所以client
只能傻傻的把封包傳送給預設閘道器,從此封包和真正的目的地址就“南轅北轍”了。當然ping的結果就是網路不可達。
路由設定
在client
上檢視路由表
route
在client
上新增路由
route add -net 172.16.0.0/16 gw 172.16.2.254
永久設定,則在/etc/rc.local
裡新增路由資訊
route add -net 172.16.0.0/16 gw 172.16.2.254
檢視路由表
route
實驗結果
檢測連通性
ping www.baidu.com -c 4
ping 172.16.2.11 -c 4
ping 172.16.3.11 -c 4
ping 172.16.4.11 -c 4
存取內外網資源
curl http://www.baidu.com/
curl http://172.16.2.11:8080/index.html
curl http://172.16.3.11:8080/index.html
curl http://172.16.4.11:8080/index.html
解決的辦法很簡單,就是1條命令而已。
但是蘊藏在這條命令背後的原理、概念、理論,則需要我們進行深究!
dd
相關文章