當前位置: 妍妍網 > 碼農

linux 路由閘道器:生產常見問題

2024-07-04碼農

連結:https://www.cnblogs.com/rebrobot/p/17579198.html

關於linux的預設閘道器

預設閘道器是一個用於 TCP/IP 協定的配置項,是一個可直接到達的 IP 路由器的 IP 地址。配置預設閘道器可以在 IP 路由表中建立一個預設路徑。一台主機可以有多個閘道器。預設閘道器的意思是一台主機如果找不到可用的閘道器,就把封包發給預設指定的閘道器,由這個閘道器來處理封包。現在主機使用的閘道器,一般指的是預設閘道器。 一台電腦的預設閘道器是不可以隨隨便便指定的,必須正確地指定,否則一台電腦就會將封包發給不是閘道器的電腦,從而無法與其他網路的電腦通訊。預設閘道器的設定有手動設定和自動設定兩種方式。


linux裝系統設IP,這應該是系統管理員的基本功,可是不同的網路結構有不同的ip設法。
1.一塊網卡的情況
透過命令address,netmask,gateway然後netwok restart。
2.兩塊網卡的情況
1).一個閘道器的情況
這種情況也簡單,一個網卡設一個ip,其中一個網卡不設定gateway就ok了。這樣上網的時候走帶閘道器的那邊,這台機器還能和不帶閘道器的那個網路通訊。這種情況在利用linux當路由器或者代理閘道器的時候比較常見。
2).兩個閘道器的情況
這種情況相對復雜,復雜到兩塊網卡都不設定預設閘道器,這種情況發生在這台linux連線的兩個網段都不是一個網段,就是透過連線的兩個網段還可以存取其它的不同的網段。這種情況下,無論把gateway設到哪邊,都會影響到另一個網段所連線的網段不能正常使用。這就是我今天最想表述的問題。在這種情況,如果你想連線多個網段,首先要在正確的網卡上設定正確的ip,剩下的工作就交給route來做了。利用route命令把能上網或者想透過那邊上網的閘道器設定成預設閘道器,這樣就解決了一個網段了。另一個段和它所連線的所有網段。就要一條一個的加路由了。範例:
預設閘道器:
route add default gw 224.224.224.224 eth0
加路由:
route add -net 192.168.115.0/24 gw 192.168.1.254 eth1
沒有學習過路由知識的同學可能不大理解加路由為啥去115段的連線,要走1.254.這是因為,加路由的時候,指定下一跳,只指定和本機連線的那個閘道器:)
3).三個網卡的情況
和兩個網卡類似。如果你的需求是,一個網段透過兩個不同的網路上網,中間又夾著這麽一個linux的話,個人覺得除了用iptables根據不同的ip地址劃分不同的上網網路,似乎沒有其它的解決辦法。

了解windows下預設閘道器的配置,請閱讀windows下雙網卡雙閘道器的設定

Linux 雙網卡配置

linux 支持多網卡,有兩種配置方式(以雙網卡為例):

環境:主機執行裁剪的嵌入式 linux,第三方主機為 PC

1.雙網卡 + 不同網段 系統有兩個網卡,分別屬於不同的網段(比如網卡 A :192.168.0.11,網卡 B :192.168.1.22),大部份的多網卡系統都是使用的這種配置。這時的路由表基本如此:

default XiaoQiang 0.0.0.0 UG 60000 wlo1
192.168.1.0 * 255.255.255.0 U 10000 eno1

流量根據路由表選擇流向不同的網卡。路由器就是這樣實作的。

1.雙網卡 + 同網段 如果兩個網卡屬於同一個網段(比如網卡 A :192.168.1.11,網卡 B :192.168.1.22)。這時系統的路由表還是有一個預設路由(比如流量都預設流向 wlo1 )。從表面上看,系統此時兩個網卡都可以正常通訊,但實際上還是有問題的。

假如預設路由為網卡 A ,此時從外界 Ping 192.168.1.11 和 192.168.1.22 都正常,但是如果此時拔掉網卡 A ,然後因為預設路由為 192.168.1.11 ,所以此時外界就不無法 Ping 通主機了,但是此時如果修改了預設路由或者使用 ifconfig 關閉網卡 A ,然後就可以恢復通訊了。

兩個網卡都在使用時,如果 ping 兩個 IP (192.168.1.11 和 192.168.1.22),會發現,如果拔掉了非預設路由的網卡 B(192.168.1.22),再去 ping 192.168.1.22 ,仍然可以通訊,並且在第三方主機檢查 ARP 表,會發現 192.168.1.11 和 192.168.1.22 的 MAC 地址相同。

出現這種情況的原因就是因為第三方主機和本機通訊時會使用預設路由,所以第三方主機 ARP 表上會把網卡 A 和 B 的 MAC 地址標識為網卡 A(預設路由)的 MAC 地址。要解決這個問題可以使用工具 iproute2 把兩個網卡分到兩個不同路由表。

echo "210 local100" >>/etc/iproute2/rt_tables
echo "220 local200" >>/etc/iproute2/rt_tables
ip route add192.168.1.0/24 dev wlo0 src 192.168.1.11table local100
ip route add192.168.1.0/24 dev eno1 src 192.168.1.22table local200
ip route adddefault dev wlo0 table local100
ip route adddefault dev eno1 table local200
ip rule addfrom192.168.1.11table local100
ip rule addfrom192.168.1.22table local200
ip route flush cache

然後第三方主機再於本機進行通訊就會根據不同的 IP 選擇了不同的網卡進行通訊。此時系統會優先選擇 table 數位最小的路由表來進行路由。假如此時拔掉網卡A ,則系統會自動選擇網卡 B 作為新的路由出口。

雙網口網卡作用

雙網口網卡(Dual Network Interface Card,簡稱Dual NIC)是指一塊網卡上整合了兩個獨立的網口,可以連線到兩個不同的網路。它的作用有以下幾個方面:

1.實作網路隔離:透過將伺服器接入不同的網路,可以實作網路隔離,避免一些安全問題和效能問題。例如,將一台伺服器的一個網口連線到公網,另一個網口連線到內網,可以實作外網存取伺服器上的服務,同時內網的資源可以不暴露到公網上。

2.提高網路效能:透過使用雙網口網卡,可以實作負載均衡和冗余備份,提高網路的可用性和效能。例如,將兩個網口連線到不同的交換機上,可以實作負載均衡,將網路流量分擔到兩個網口上,提高網路的吞吐量。

3.實作虛擬化網路:透過使用虛擬化技術,可以將一個物理網卡分成多個虛擬網卡,並為每個虛擬網卡分配不同的網路地址。這樣,可以實作多個虛擬機器之間的互通,同時隔離不同虛擬機器的網路流量。

總之,雙網口網卡可以實作多種網路套用場景,如負載均衡、冗余備份、網路隔離、虛擬化等。它在伺服器、防火墻、路由器等網路裝置中廣泛套用。

雙網卡一般情況不能有兩個閘道器

特別是別設內網閘道器,這樣有段時間過後會出現存取不了外網情況

支持兩個閘道器的方法倒是有

讓雙網卡一台電腦擁有兩個閘道器(轉)

首先要聲明一點,雙網卡一台電腦擁有兩個閘道器是不可能的,因為預設閘道器(default gateway)只能是一個。

給伺服器安裝兩塊網卡,分別設定不同的ip和閘道器(內網和外網),外網的透過外網網卡來存取,內網的透過內網網卡來存取,似乎實作起來很簡單,但事實上很難啊,因為預設閘道器(default gateway)只能是一個!

解決的辦法就是:

1、將其中一塊網卡(如外網)設定預設閘道器;

2、手工加上一條靜態路由,讓另一個網段(內網)的數據經過第二個網卡。使用route命令,命令的範例如下,希望能幫某些同誌一點小忙。

參考命令:

範例1、route add -p 10.0.0.0 mask 255.255.255.0 10.40.4.200(讓對10.0.0.1的存取走10.40.4.200的網卡,mask 後面是子網路遮罩)

範例2、route add -p 10.0.0.0 mask 255.0.0.0 10.40.4.200

範例3、route add -p 0.0.0.0 mask 0.0.0.0 10.40.4.200(不用說了吧,讓所有的存取走10.40.4.200)

說明:

1、加上-p參數,加入的路由為永久路由,不會因為電腦重新啟動而被初始化。10.40.4.200是我的電腦網卡IP。輸入route 可以得到更多的幫助。

2、如果你的電腦已經有兩個閘道器(如使用了SoftEther),用route print可以看到兩條0.0.0.0的路由,可以先刪除0.0.0.0的路由,然後重新添加。

route delete 0.0.0.0 「刪除所有0.0.0.0的路由」

附:在網路上找資料時,常常看到有人在問類似的問題,可以看出大家對路由方面的知識很陌生。於是提供以下資料,供大家參考:

1、【解讀route命令】http://www.kpcn.org/news/Read.asp?NewsID=8527
2、【學習Windows網路命令之route命令小檔案】http://www.kpcn.org/news/Read.asp?NewsID=8528

========= 以下是另一個的內容 ============

經常遇到一台電腦要同時存取兩個網路(一個是互聯網,一個是企業企業網路)的要求。以本單位為例:地址是虛構的^_^
機器有兩塊網卡,接到兩台交換機上
internet地址:218.22.123.123,子網路遮罩:255.255.255.0,閘道器:218.22.123.254
企業企業網路地址:10.128.123.123,子網路遮罩:255.255.255.0,閘道器:10.128.123.254
如果按正常的設定方法設定每塊網卡的ip地址和閘道器,再cmd下使用route print檢視時會看到
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 218.22.123.254 218.22.123.123 20
0.0.0.0 0.0.0.0 10.128.123.254 10.128.123.123 1
即指向0.0.0.0的有兩個閘道器,這樣就會出現路由沖突,兩個網路都不能存取。要實作同時存取兩個網路就要用到route命令
第一步:route delete 0.0.0.0 」刪除所有 0.0.0.0 的路由"
第二步:route add 0.0.0.0 mask 0.0.0.0 218.22.123.254 "添加 0.0.0.0 網路路由"
第三步:route add 10.0.0.0 mask 255.0.0.0 10.128.123.254 "添加 10.0.0.0 網路路由"
這時就可以同時存取兩個網路了,但碰到一個問題,使用上述命令添加的路由在系統重新啟動後會自動遺失,怎樣保存現有的路由表呢?
在win2000 下可以使用route add -p 添加靜態路由,即重新開機後,路由不會遺失。註意使用前要在tcp/ip設定裏去掉接在企業企業網路的網卡的閘道器。

============= Linux下雙網卡雙閘道器配置路由表 =============

http://hi.baidu.com/xibeihuohu/blog/item/a54d27fd18b8bf1f08244d1a.html

由於電信和網通之間互聯互通的問題,很多人選擇雙路線機房, 所謂雙路線機房就是擁有兩條出口,一條電信一條網通。最近在一個雙路線機房測試一台伺服器,打算作為論壇的資料庫伺服器使用,伺服器作業系統為 Linux。計劃配置為雙IP,雙網域名稱,使得瀏覽者透過電信和網通兩條路線都能正常存取伺服器,而且各走各的,互不影響。在配置網路的時候遇到了問題,由 於Linux預設只有一個閘道器,在網路上查詢了很久,找到一個解決方案,因此整理了一下。感謝原文作者jac003ke。

伺服器作業系統RedHat linux 9,設定兩張路由表
1. vi /etc/iproute2/rt_tables,增加網通和電信兩個路由表
251 tel 電信路由表
252 cnc 網通路由表

2. 給網卡繫結兩個地址用於電信和網通兩個路線
ip addr add 192.168.0.2/24 dev eth0
ip addr add 10.0.0.2/24 dev eth1

3、分別設定電信和網通的路由表

電信路由表:
#確保找到本地子網路
ip route add 192.168.0..0/24 via 192.168.0.2 dev eth0 table tel
#內部回環網路
ip route add 127.0.0.0/8 dev lo table tel
#192.168.0.1為電信網路預設閘道器地址
ip route add default via 192.168.0.1 dev eth0 table tel

網通路線路由表:
#確保找到本地子網路
ip route add 10.0.0.0/24 via 10.0.0.2 dev eth1 table cnc
#內部回環網路
ip route add 127.0.0.0/8 dev lo table cnc
#10.0.0.1是網通的預設閘道器
ip route add default via 10.0.0.1 dev eth1 table cnc

4、電信和網通各有自己的路由表,制定策略,讓192.168.0.2的回應封包走電信的路由表路由,10.0.0.2的回應封包走網通的路由表路由
ip rule add from 192.168.0.1 table tel
ip rule add from 10.0.0.1 table cnc

配置雙網卡的目的:

1、實作冗余

2、負載均衡

linux 主機安裝雙網卡,共享一個IP地址,對外提供存取,實際 同樣 連線兩條物理路線到交換機 實作平時 雙網卡同時工作,分流網路壓力,同時提供冗余備份,監控,防止物理路線的單點故障。

用於關鍵性節點伺服器,高網路IO伺服器,網路共享儲存伺服器等。。。。。

Linux bonding 驅動模組 提供了一種方法,用以把多個網路介面(network interface)組合成一個 邏輯的 "bonded" 介面。Bonded 介面的工作方式取決於驅動的模式:不同的模式提供了熱備份或負載均衡等不同的服 務。

此外,驅動還會監控鏈路的可用性。大多數目前釋出的Linux內核都以模組(module)方式帶了bonding驅動, ifenslave工具(主要配置工具)也都已經安裝好。

• 輪詢策略(round robin),mode=0,按照裝置順序依次傳輸封包,提供負載均衡和容錯能力 • 主備策略(active-backup),mode=1,只有主網卡處於工作狀態,備網卡處於備用狀態,主網卡壞掉後備網卡開始工作,提供容錯能力 • 異或策略(load balancing (xor)),mode=2,根據源MAC地址和目的MAC地址進行異或計算的結果來選擇傳輸裝置,提供負載均衡和容錯能力 • 廣播策略(fault-tolerance (broadcast)),mode=3,將所有封包傳輸給所有介面透過全部裝置來傳輸所有數據,一個報文會復制兩份透過bond下的兩個網卡分別發送出去,提供高容錯能力 • 動態連結聚合(lacp),mode=4,按照802.3ad協定的聚合自動配置來共享相同的傳輸速度,網卡頻寬最高可以翻倍,鏈路聚合控制協定(LACP)自動通知交換機聚合哪些埠,需要交換機支持 802.3ad協定,提供容錯能力 • 輸出負載均衡模式(transmit load balancing),mode=5,輸出負載均衡模式,只有輸出實作負載均衡,輸入數據時則只選定其中一塊網卡接收,需要網卡和驅動支持ethtool命令 輸入/輸出負載均衡模式(adaptive load balancing),mode=6,輸入和輸出都實作負載均衡,需要網卡和驅動支持ethtool命令

CentOS雙網卡繫結,實作負載均衡

bind0 IP 地址:192.168.10.54

先關閉兩張網卡

先關閉兩張網卡

[root@uplooking ~]# ifdown ens33
[root@uplooking ~]# ifdown ens38

新建網卡配置檔

[root@uplooking /etc/sysconfig/network-scripts]#vim ifcfg-bond0
ifcfg-bond0 配置檔
TYPE=Ethernet
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
IPADDR="192.168.10.54"
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
ONBOOT=yes
BONDING_OPTS="miimon=100 mode=6" ##bonding 參數直接在網卡配置檔中指派,並且開機可以自動生效
\## mode=11為儲備模式, 推薦為 6 ,不會浪費資源。

ifcfg-ens33 配置檔

TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes

ifcfg-ens38 配置檔

TYPE=Ethernet
BOOTPROTO=none
NAME=ens38
DEVICE=ens38
ONBOOT=yes
MASTER=bond0
SLAVE=yes

修改/etc/modprobe.d/dist.conf檔

在此檔中添加以下內容:

alias bond0 bonding,表示系統在啟動時載入bonding模組,對外虛擬網路介面裝置為 bond0

miimon=100,表示系統每100ms監測一次鏈路連線狀態,如果有一條路線不通就轉入另一條線

mode=1,表示繫結模式為1

primary=eth0,系統首先eth0作為bond0介面與外界資訊的傳輸介面

修改配置檔/etc/rc.local

在此檔中添加以下內容:

modprobe bonding miimon=100 mode=1

重新開機網路

systemctl restart network

觀察驗證:

[root@uplooking ~]# ifconfig

檢視 bind0 的狀態

ip addr 或者 ifconfig

### 狀態資訊驗證

cat /proc/net/bonding/bond0

檔可以顯示 雙網卡 配置資訊。ens 33 和 ens 38 的 啟用狀態。

透過查閱該檔,獲取bond0 網卡的工作狀態資訊

透過斷開不同網卡,觀察改檔的資訊變化。

[root@server-18 ~]# watch -n 1"cat /proc/net/bonding/bond0"
EthernetChannelBondingDriver: v3.7.1 (April27, 2011)
BondingMode: adaptive load balancing
PrimarySlave: None
CurrentlyActiveSlave: ens37
MIIStatus: up
MIIPollingInterval (ms): 100
UpDelay (ms): 0
DownDelay (ms): 0
SlaveInterface: ens33
MIIStatus: up
Speed: 1000Mbps
Duplex: full
LinkFailureCount: 3
PermanentHWaddr: 00:0c:29:e6:3b:9d
Slave queue ID: 0
SlaveInterface: ens38
MIIStatus: up
Speed: 1000Mbps
Duplex: full
LinkFailureCount: 3
PermanentHWaddr: 00:0c:29:e6:3b:a7



驗證負載均衡的效果:

http-02 ping 192.168.10.54 arp -a 查詢 arp 表:發現 192.168.10.54 在 00:0C:29:58:4C:31 (ens33) 網卡上

http-03 ping 192.168.10.54 arp -a 查詢 arp 表:發現 192.168.10.54 在 00:0C:29:58:4C:3B (ens33) 網卡上

取消 bond0 網卡的方法

1、ifdown bond0 ##此時網路斷開 2、移除ifcfg-bond0 網卡的配置檔,建議不要直接刪除,而是移到別的位置,備份起來、 [root@server-18 /etc/sysconfig/network-scripts]#mv ifcfg-bond0 /root

echo -bond0 > /sys/ class/net/bonding_masters ## 移除系統中的 bonding狀態。

3、修改 ens33 ens38 網卡配置,解除 與 bond0 網卡的從屬關系 BOOTPROTO=static MASTER=bond0 去掉 SLAVE=yes 去掉 加上自己網卡的原先配置。

4、 systemctl restart network

5、 ifconfig再次觀察

<END>

點這裏👇關註我,記得標星呀~

感謝你的分享,點贊,在看三