關于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
雙網卡 + 不同網段 系統有兩個網卡,分別屬于不同的網段(比如網卡 A :192.168.0.11,網卡 B :192.168.1.22),大部分的多網卡系統都是使用的這種配置。這時的路由表基本如此:
?
?
default XiaoQiang 0.0.0.0 UG 600 0 0 wlo1 192.168.1.0 * 255.255.255.0 U 100 0 0 eno1
?
?
流量根據路由表選擇流向不同的網卡。路由器就是這樣實現的。
雙網卡 + 同網段 如果兩個網卡屬于同一個網段(比如網卡 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 add 192.168.1.0/24 dev wlo0 src 192.168.1.11 table local100 ip route add 192.168.1.0/24 dev eno1 src 192.168.1.22 table local200 ip route add default dev wlo0 table local100 ip route add default dev eno1 table local200 ip rule add from 192.168.1.11 table local100 ip rule add from 192.168.1.22 table local200 ip route flush cache
?
?
然后第三方主機再于本機進行通信就會根據不同的 IP 選擇了不同的網卡進行通信。此時系統會優先選擇 table 數字最小的路由表來進行路由。假如此時拔掉網卡A ,則系統會自動選擇網卡 B 作為新的路由出口。
雙網口網卡作用
雙網口網卡(Dual Network Interface Card,簡稱Dual NIC)是指一塊網卡上集成了兩個獨立的網口,可以連接到兩個不同的網絡。它的作用有以下幾個方面:
實現網絡隔離:通過將服務器接入不同的網絡,可以實現網絡隔離,避免一些安全問題和性能問題。例如,將一臺服務器的一個網口連接到公網,另一個網口連接到內網,可以實現外網訪問服務器上的服務,同時內網的資源可以不暴露到公網上。
提高網絡性能:通過使用雙網口網卡,可以實現負載均衡和冗余備份,提高網絡的可用性和性能。例如,將兩個網口連接到不同的交換機上,可以實現負載均衡,將網絡流量分擔到兩個網口上,提高網絡的吞吐量。
實現虛擬化網絡:通過使用虛擬化技術,可以將一個物理網卡分成多個虛擬網卡,并為每個虛擬網卡分配不同的網絡地址。這樣,可以實現多個虛擬機之間的互通,同時隔離不同虛擬機的網絡流量。
總之,雙網口網卡可以實現多種網絡應用場景,如負載均衡、冗余備份、網絡隔離、虛擬化等。它在服務器、防火墻、路由器等網絡設備中廣泛應用。
雙網卡一般情況不能有兩個網關
特別是別設內網網關,這樣有段時間過后會出現訪問不了外網情況
支持兩個網關的方法倒是有
讓雙網卡一臺電腦擁有兩個網關(轉)
首先要聲明一點,雙網卡一臺電腦擁有兩個網關是不可能的,因為默認網關(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=1 1為儲備模式, 推薦為 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" Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: adaptive load balancing Primary Slave: None Currently Active Slave: ens37 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens33 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 3 Permanent HW addr: 00:0c:29:e6:3b:9d Slave queue ID: 0 Slave Interface: ens38 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 3 Permanent HW addr: 00:0c:29:e6:3b:a7
?
?
驗證負載均衡的效果:
http-02 ping 192.168.10.54 arp -a 查詢 arp 表:發現 192.168.10.54 在 00294C:31 (ens33) 網卡上
http-03 ping 192.168.10.54 arp -a 查詢 arp 表:發現 192.168.10.54 在 00294C: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再次觀察
審核編輯:黃飛
?
評論