介紹
在管理 Linux 服務(wù)器和排查網(wǎng)絡(luò)問(wèn)題時(shí),熟悉一些基本的網(wǎng)絡(luò)工具是很有幫助的。這些工具中的一部分最初是為了查看網(wǎng)絡(luò)狀態(tài)而編寫(xiě)的,但其中也包含了一些可以用來(lái)管理和配置網(wǎng)絡(luò)連接的底層工具。 一直以來(lái),這些互不相關(guān)的網(wǎng)絡(luò)工具被打包在一起發(fā)布,它們被統(tǒng)稱(chēng)為net-tools。
雖然net-tools工具包提供了相當(dāng)完善的功能,但是包內(nèi)工具的開(kāi)發(fā)卻是相互獨(dú)立的,它們的使用方式也各不相同。 由于net-tools包內(nèi)工具的使用方式大相徑庭,并且包內(nèi)的部分工具也已經(jīng)停止維護(hù),因此使用名為iproute2的新工具包來(lái)替換原來(lái)net-tools。
iproute2包內(nèi)的各個(gè)工具被統(tǒng)一開(kāi)發(fā)維護(hù),并且他們之間的使用方式也非常相似。另外,這些工具也可以很好地互相配合一起使用。 在本篇文章中,我們將會(huì)討論如何使用iproute2來(lái)對(duì)你的網(wǎng)絡(luò)進(jìn)行配置、維護(hù)和信息查看。我們將會(huì)使用 Ubuntu 12.04 VPS 來(lái)進(jìn)行演示,不過(guò)大多數(shù)其它現(xiàn)代 Linux 發(fā)行版都提供了相同的功能。 雖然查詢(xún)指令可以在非特權(quán)模式(非 root)下執(zhí)行,不過(guò)在修改網(wǎng)絡(luò)配置時(shí),大多數(shù)情況下還是需要 root 權(quán)限的。
如何查看網(wǎng)絡(luò)接口、地址、路由
iproute2 工具包最基礎(chǔ)的功能就是管理本機(jī)的網(wǎng)絡(luò)接口。
一般來(lái)說(shuō),本機(jī)的網(wǎng)絡(luò)接口通常會(huì)被命名成像是eth0,eth1,lo這樣的名稱(chēng)。在過(guò)去,常常使用net-tools包提供的ifconfig命令來(lái)配置網(wǎng)絡(luò)接口。而使用iproute2時(shí),通??梢允褂米用頸p addr和ip link來(lái)完成相同的功能。
使用 ifconfig 時(shí),你可以通過(guò)輸入不帶參數(shù)的如下命令來(lái)查看本機(jī)當(dāng)前所有網(wǎng)絡(luò)接口的狀態(tài):
ifconfig
eth0Linkencap:EthernetHWaddr54f7c2:1b inetaddr:192.168.56.126Bcast:192.168.56.255Mask:255.255.255.0 inet6addr:fe80:f7ffc21b/64Scope:Link UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1 RXpackets:114273errors:0dropped:0overruns:0frame:0 TXpackets:58866errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:1000 RXbytes:73490903(73.4MB)TXbytes:14294252(14.2MB) Interrupt:20Memory:f7f00000-f7f20000 loLinkencap:LocalLoopback inetaddr:127.0.0.1Mask:255.0.0.0 inet6addr:::1/128Scope:Host UPLOOPBACKRUNNINGMTU:65536Metric:1 RXpackets:3942errors:0dropped:0overruns:0frame:0 TXpackets:3942errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:0 RXbytes:668121(668.1KB)TXbytes:668121(668.1KB)
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的信息,你可以將網(wǎng)絡(luò)接口名稱(chēng)作為參數(shù)傳給 ifconfig:
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 54f7c2:1b
inet addr:192.168.56.126 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80:f7ffc21b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:114273 errors:0 dropped:0 overruns:0 frame:0
TX packets:58866 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:73490903 (73.4 MB) TX bytes:14294252 (14.2 MB)
Interrupt:20 Memory:f7f00000-f7f20000
使用 iproute2 包提供的子命令,我們可以實(shí)現(xiàn)相同的功能。
如果想要查看每個(gè)網(wǎng)絡(luò)接口被配置的地址,可以輸入不帶參數(shù)的 ip addr 命令:
ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 000000:00 brd 000000:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 54f7c2:1b brd ffffff:ff
inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:f7ffc21b/64 scope link
valid_lft forever preferred_lft forever,multicast,up,lower_up>,up,lower_up>
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的地址信息,你可以使用如下格式的命令:
ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 54f7c2:1b brd ffffff:ff
inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:f7ffc21b/64 scope link
valid_lft forever preferred_lft forever,multicast,up,lower_up>
事實(shí)上,ip addr只是ip addr show命令的別名。
如果你只關(guān)心網(wǎng)絡(luò)接口本身,而不在意它們被配置的地址,那么你可以使用 ip link 子命令:
ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 000000:00 brd 000000:00
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 0413a2:01 brd ffffff:ff,multicast,up,lower_up>,up,lower_up>
如果想要查看某個(gè)特定網(wǎng)絡(luò)接口的信息,那么你可以添加關(guān)鍵字 show 和對(duì)應(yīng)網(wǎng)絡(luò)接口的名字:
ip link show eth0
如果想要獲得網(wǎng)絡(luò)接口如何通信的統(tǒng)計(jì)數(shù)據(jù),那么你可以給link子命令傳入-s選項(xiàng):
ip -s link show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 0413a2:01 brd ffffff:ff
RX: bytes packets errors dropped overrun mcast
853144 14672 0 0 0 0
TX: bytes packets errors dropped carrier collsns
91257 537 0 0 0 0,multicast,up,lower_up>
那么我們?nèi)绾握业轿覀兊穆酚杀砟兀柯酚杀戆说竭_(dá)其他網(wǎng)絡(luò)地址的路徑信息,我們可以通過(guò)輸入以下內(nèi)容來(lái)打印當(dāng)前的路由表:
ip route show
default via 107.170.58.1 dev eth0 metric 100 107.170.58.0/24 dev eth0 proto kernel scope link src 107.170.58.162
這條命令的輸出內(nèi)容告訴我們,通往更大互聯(lián)網(wǎng)的默認(rèn)路由是通過(guò) eth0 接口到達(dá)地址為 107.170.58.1 的網(wǎng)關(guān)。通過(guò) eth0 接口可以訪問(wèn)地址為 107.170.58.1 的網(wǎng)關(guān),并且 eth0 接口自身的 ip 地址是 107.170.58.162。
歡迎關(guān)注公眾號(hào):網(wǎng)絡(luò)工程師阿龍!某音搜索網(wǎng)絡(luò)工程師阿龍!
如何配置網(wǎng)絡(luò)接口和地址
既然你已經(jīng)熟悉了如何獲取網(wǎng)絡(luò)接口信息和與它們關(guān)聯(lián)的地址信息,那么下一步就應(yīng)該是了解如何修改網(wǎng)絡(luò)接口的狀態(tài)了。
首先需要了解如何配置接口本身。你仍然可以使用 ip link 子命令,不過(guò)這次你需要傳入set而不是show來(lái)修改配置。
例如,我們可以通過(guò)使用以下命令來(lái)打開(kāi)或關(guān)閉網(wǎng)絡(luò)接口:
ip link set eth1 up ip link set eth1 down
注意:當(dāng)心不要意外關(guān)閉了你正連接的 VPS 的網(wǎng)絡(luò)接口!
你也可以使用 ip link 子命令來(lái)配置網(wǎng)絡(luò)接口的屬性。比如,如果你想打開(kāi)或關(guān)閉網(wǎng)絡(luò)接口的多播標(biāo)志,你可以輸入:
ip link set eth1 multicast on ip link set eth1 multicast off
你也可以輸入如下的命令來(lái)修改 MTU 和分組隊(duì)列的長(zhǎng)度:
ip link set eth1 mtu 1500 iplinkseteth1txqueuelen1000
如果你正配置的網(wǎng)絡(luò)接口是關(guān)閉(down)狀態(tài),那么你可以修改網(wǎng)絡(luò)接口的名稱(chēng)和與之關(guān)聯(lián)的 arp 標(biāo)志:
ip link set eth1 name eth10 ip link set eth1 arp on
如果要修改網(wǎng)絡(luò)接口的地址,那么我們可以再次使用 ip addr 子命令。
通過(guò)輸入以下命令我們可以為網(wǎng)絡(luò)接口添加一個(gè)地址:
ip addr add IPADDRESS/NETPREFIX brd + dev INTERFACE
該命令的brd +部分會(huì)自動(dòng)設(shè)置廣播地址。每個(gè)網(wǎng)絡(luò)接口都可以添加多個(gè)地址而不會(huì)出現(xiàn)任何問(wèn)題。
我們也可以執(zhí)行相反的操作來(lái)刪除網(wǎng)絡(luò)地址。要?jiǎng)h除指定網(wǎng)絡(luò)接口的某個(gè)地址,可以使用如下命令:
歡迎關(guān)注公眾號(hào):網(wǎng)絡(luò)工程師阿龍!某音搜索網(wǎng)絡(luò)工程師阿龍!
ip addr del IPADDRESS/NETPREFIX dev INTERFACE
你也可以省略輸入地址,這樣與該網(wǎng)絡(luò)接口關(guān)聯(lián)的第一個(gè)被列出的地址將被刪除。
通過(guò)使用 ip route [add | change | replace | delete ] 語(yǔ)法,你也可以刪除路由規(guī)則。但我們不會(huì)在這里介紹,因?yàn)榇蠖鄶?shù)人不會(huì)定期對(duì)此進(jìn)行調(diào)整。
IpRoute2 的其他功能
IPRoute2 還具有一些其他功能,不過(guò)我們將不會(huì)在本教程中進(jìn)行深入討論。相反,我們將討論這些是什么,以及在什么情況下你可能會(huì)發(fā)現(xiàn)它們有用。 IP 路由規(guī)則(rule)的概念很難談?wù)?,因?yàn)樗浅R蕾?lài)于具體的情況?;旧?,你可以基于多個(gè)字段(包括目標(biāo)地址,源地址,路由協(xié)議,數(shù)據(jù)包大小等)來(lái)決定如何路由流量。 我們使用 ip rule 子命令使用此功能?;静樵?xún)命令遵循和其他子命令一樣的語(yǔ)法:
ip rule show
0: from all lookup local 32766: from all lookup main 32767: from all lookup default這三條路由規(guī)則是內(nèi)核配置的默認(rèn)規(guī)則。第一行可以匹配任何流量,用于路由高優(yōu)先級(jí)的流量。第二行是處理常規(guī)路由的主要規(guī)則。最后一行是空規(guī)則,如果上面的規(guī)則與數(shù)據(jù)包不匹配,則使用該行進(jìn)行后處理(post-processing)。 由 IPRoute2 配置的路由規(guī)則被存儲(chǔ)在路由策略數(shù)據(jù)庫(kù)(routing policy database)中。通過(guò)與規(guī)則集合進(jìn)行匹配來(lái)選擇該數(shù)據(jù)庫(kù)中的路由策略。我們可以使用適當(dāng)?shù)牟僮鱽?lái)添加或刪除規(guī)則。但是,你不應(yīng)該在不知道自己在做什么的情況下執(zhí)行這些操作。 可以通過(guò)man查看 ip rule 的手冊(cè)來(lái)進(jìn)行進(jìn)一步的學(xué)習(xí)。
man ip # search for "ip rule"
我們將簡(jiǎn)要討論的另一件事是通過(guò)這些工具來(lái)處理 arp 信息。處理這些信息的子命令被稱(chēng)作 ip neigh。
ip neigh
107.170.58.1 dev eth0 lladdr 005e01:68 DELAY
默認(rèn)情況下,這里至少應(yīng)列出你的網(wǎng)關(guān)。ARP(Address Resolution Protocol)是地址解析協(xié)議的縮寫(xiě),它可以通過(guò) IP 地址來(lái)獲取 MAC 地址。 基本上,每當(dāng)需要轉(zhuǎn)發(fā) IP 分組時(shí),你的主機(jī)就會(huì)在本地網(wǎng)絡(luò)上廣播 ARP 請(qǐng)求,向網(wǎng)絡(luò)中的其他主機(jī)詢(xún)問(wèn)誰(shuí)擁有這個(gè) IP 地址。擁有這個(gè) IP 地址的主機(jī)將把自己的 MAC 地址回復(fù)給詢(xún)問(wèn)者,然后詢(xún)問(wèn)者就知道該把 IP 分組發(fā)給誰(shuí)了。詢(xún)問(wèn)者會(huì)把 IP 地址到 MAC 地址的映射緩存到本地(一般持續(xù) 15 分鐘),這樣后續(xù)的分組在需要轉(zhuǎn)發(fā)時(shí)就不需要再次通過(guò) ARP 請(qǐng)求詢(xún)問(wèn)了。
結(jié)語(yǔ)
現(xiàn)在,你應(yīng)該對(duì)如何使用 iproute2 包中的工具有了一個(gè)很好的了解了。
盡管許多指南和教程仍然引用舊的 net-tools 工具包,部分原因是有經(jīng)驗(yàn)的系統(tǒng)管理員過(guò)去經(jīng)常使用舊的工具包,但本指南中討論的命令將在未來(lái)幾年內(nèi)逐步替代 net-tools 工具。
重要的是,現(xiàn)在你必須熟悉這些命令,然后才能在已切換到這些命令的系統(tǒng)上解決網(wǎng)絡(luò)問(wèn)題(Arch Linux 早在 2011 年就已經(jīng)完全切換到了新工具)。新工具用法更加一致,你可以指望在所有命令中都可以使用類(lèi)似的用法。你使用這些命令的次數(shù)越多,它們對(duì)你而言就越自然。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
611瀏覽量
29739 -
路由器
+關(guān)注
關(guān)注
22文章
3899瀏覽量
119246 -
vps
+關(guān)注
關(guān)注
1文章
121瀏覽量
12488
原文標(biāo)題:都2023年了,別再用ifconfig啦! 趕緊試試這個(gè)吧!
文章出處:【微信號(hào):網(wǎng)絡(luò)工程師筆記,微信公眾號(hào):網(wǎng)絡(luò)工程師筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
網(wǎng)絡(luò)接口:數(shù)字世界的“門(mén)鈴”,你了解多少?
Ad Hoc網(wǎng)絡(luò)地址自動(dòng)配置技術(shù)研究
嵌入式網(wǎng)絡(luò)設(shè)備地址動(dòng)態(tài)配置的研究
網(wǎng)絡(luò)地址,什么是網(wǎng)絡(luò)地址
一種針對(duì)網(wǎng)絡(luò)穩(wěn)定性的全I(xiàn)P車(chē)載網(wǎng)地址配置方案
如何配置網(wǎng)絡(luò)接口和地址
評(píng)論