首頁 > 軟體

Linux系統多網絡卡環境下的路由設定

2020-06-16 16:39:44

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 WorkstationeNSP來模擬實驗環境了。

問題背景

如下圖拓撲所示,如果去掉client節點,內網外網就是相互隔離的網路。

但是實際情況是,client節點既需要存取外網資源,又需要存取內網資源,而client只能設定一條預設路由。如果將預設路由設定在外網網絡卡,client可以存取172.16.2.0/24網路的資源和外網的資源,但是其餘內網資源將無法存取;如果將預設路由設定在內網網絡卡,client雖然可以完全存取內網資源,但是卻不能存取外網資源。
怎麼解決呢?

實驗環境

  1. VMware Workstation Pro
  2. 4台最小化安裝的CentOS 7.3虛擬機器
  3. 華為eNSP模擬器

實驗拓撲

去掉client節點,內網和外網是隔離的網路。
外網網路為10.0.0.0/16,代表運營商的接入網;
內網網路為172.16.0.0/16,代表內網部分(該部分為了安全,不允許對網際網路的直接存取)。
其中

  • client為雙網絡卡的主機,兩網絡卡網段分別為10.0.0.0/16172.16.2.0/24
  • server2172.16.2.0/24網段的伺服器;
  • server3172.16.3.0/24網段的伺服器;
  • server4172.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/24172.16.4.0/24是不能存取到的。

為什麼client能存取172.16.2.0/24網路,而不能存取172.16.0.0/16的其餘網路呢?
因為client位於172.16.2.0/24網路內,在網路內進行通訊,封包不用傳送至其他網路,當然預設閘道器也就不起作用了。
而當client172.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


IT145.com E-mail:sddin#qq.com