Linux TCP/IP網(wǎng)絡小課堂:net-tools與iproute2大比較
譯文如今許多系統(tǒng)管理員仍結(jié)合使用ifconfig、route、arp和netstat等命令行工具(它們統(tǒng)稱為net-tools),管理和排查各種網(wǎng)絡配置。這類工具原先起源于BSD TCP/IP工具箱,旨在配置老式Linux內(nèi)核的網(wǎng)絡功能。自2001年以后,它在Linux社區(qū)的發(fā)展就止步不前了。Arch Linux和CentOS/RHEL 7等一些Linux發(fā)行版已經(jīng)棄用了net-tools,其他發(fā)行版計劃棄用net-tools,改而使用iproute2。
iproute2是另一個系列的網(wǎng)絡配置工具,它旨在取代net-tools的功能。net-tools可以通過procfs(/proc)和ioctl系統(tǒng)調(diào)用,訪問和更改內(nèi)核網(wǎng)絡配置,iproute2則通過網(wǎng)絡鏈路套接字接口與內(nèi)核進行聯(lián)系。/proc接口比網(wǎng)絡鏈路接口來得更笨拙。拋開性能不講,iproute2的用戶界面比net-tools的用戶界面要來得直觀。比如說,網(wǎng)絡資源(比如鏈路、IP地址、路由和隧道等)用“對象”抽象進行了恰當?shù)亩x,你可以使用一致的語法來管理不同的對象。最重要的是,迄今為止iproute2一直在積極開發(fā)當中。
如果你仍在使用net-tools,是時候改用iproute2了,如果你想跟上Linux內(nèi)核的******的網(wǎng)絡功能特性,更是如此。很可能有好多操作可以用iproute2來實現(xiàn),卻無法用net-tools來實現(xiàn),無論是基于源的路由、服務質(zhì)量、虛擬局域網(wǎng)(VLAN)、綁定,還是網(wǎng)橋其他什么操作。另外值得一提的是,網(wǎng)絡管理器等更高級網(wǎng)絡配置工具依賴iproute2。
對于想要改用iproute2的那些人來說,下面對net-tools與iproute2進行了一番全面的比較。
顯示所有連接的網(wǎng)絡接口
下列命令顯示了所有可用的網(wǎng)絡接口(無論是不是活動網(wǎng)絡接口)。
使用net-tools:
- $ ifconfig -a
使用iproute2:
- $ ip link show
激活或禁止網(wǎng)絡接口
想激活/禁止某一個網(wǎng)絡接口,可以使用這些命令。
使用net-tools:
- $ sudo ifconfig eth1 up
- $ sudo ifconfig eth1 down
使用iproute2:
- $ sudo ip link set down eth1
- $ sudo ip link set up eth1
將一個或多個IPv4地址分配給網(wǎng)絡接口
使用這些命令,即可配置網(wǎng)絡接口的IPv4地址。
使用net-tools:
- $ sudo ifconfig eth1 10.0.0.1/24
使用iproute2:
- $ sudo ip addr add 10.0.0.1/24 dev eth1
注意:如果使用iproute2,你可以將多個IP地址分配給某個接口;如果換成ifconfig,就無法做到這點。就ifconfig而言,一個變通辦法就是使用IP別名。
- $ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
- $ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
- $ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1
從網(wǎng)絡接口刪除IPv4地址
就刪除IP地址而言,如果使用net-tools,除了分配0給接口外,沒有合適的方法從網(wǎng)絡接口刪除IPv4地址。iproute2可以合理地處理這個問題。
使用net-tools:
- $ sudo ifconfig eth1 0
使用iproute2:
- $ sudo ip addr del 10.0.0.1/24 dev eth1
顯示網(wǎng)絡接口的一個或多個IPv4地址
可以通過下列方法,檢查某一個網(wǎng)絡接口的IPv4地址。
使用net-tools:
- $ ifconfig eth1
使用iproute2:
- $ ip addr show dev eth1
同樣,要是有多個IP地址分配給了某個接口,iproute2就會顯示所有IP地址,而net-tools只能顯示一個IP地址。
分配IPv6地址給網(wǎng)絡接口
使用這些命令,即可將一個或多個IPv6地址添加給某個網(wǎng)絡接口。net-tools和iproute2都讓你可以將多個IPv6地址添加給某個接口。
使用net-tools:
- $ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
- $ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64
使用iproute2:
- $ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
- $ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1
顯示網(wǎng)絡接口的一個或多個IPv6地址
可以通過以下方法顯示某一個網(wǎng)絡接口的IPv6地址。net-tools和iproute2都能顯示所有已分配的IPv6地址。
使用net-tools:
- $ ifconfig eth1
使用iproute2:
- $ ip -6 addr show dev eth1
刪除網(wǎng)絡接口的IPv6地址
使用這些命令即可刪除某個接口的任何不必要的IPv6地址。
使用net-tools:
- $ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64
使用iproute2:
- $ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1
更改網(wǎng)絡接口的MAC地址
若想欺騙網(wǎng)絡接口的MAC地址,請使用下列命令。要注意:在更改MAC地址之前,你需要先禁止該接口。
使用net-tools:
- $ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66
使用iproute2:
- $ sudo ip link set dev eth1 address 08:00:27:75:2a:67
查看IP路由表
net-tools有兩個選項可用于顯示內(nèi)核的IP路由表:route或netstat。如果是iproute2,只需使用ip route命令。
使用net-tools:
- $ route -n $ netstat -rn
使用iproute2:
- $ ip route show
添加或改動默認路由
下面這些命令可以添加或改動內(nèi)核IP路由表中的默認路由。要注意:如果使用net-tools,只要添加一個新的默認路由,就可以實現(xiàn)改動默認路由這個操作。如果使用iproute2,只需使用ip route replace命令。
使用net-tools:
- $ sudo route add default gw 192.168.1.2 eth0
- $ sudo route del default gw 192.168.1.1 eth0
使用iproute2:
- $ sudo ip route add default via 192.168.1.2 dev eth0
- $ sudo ip route replace default via 192.168.1.2 dev eth0
添加或刪除靜態(tài)路由
可使用下列命令添加或刪除靜態(tài)路由。
使用net-tools:
- $ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
- $ sudo route del -net 172.16.32.0/24
使用iproute2:
- $ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
- $ sudo ip route del 172.16.32.0/24
查看套接字統(tǒng)計數(shù)據(jù)
下面這些命令可以查看套接字統(tǒng)計數(shù)據(jù)(比如激活/偵聽TCP/UDP套接字)。
使用net-tools:
- $ netstat
- $ netstat -l
使用iproute2:
- $ ss
- $ ss -l
查看ARP表
你可以使用這些命令來顯示內(nèi)核的ARP表。
使用net-tools:
- $ arp -an
使用iproute2:
- $ ip neigh
添加或刪除靜態(tài)ARP項
添加或刪除本地ARP表中的靜態(tài)ARP項可通過以下方法來實現(xiàn)。
使用net-tools:
- $ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
- $ sudo arp -d 192.168.1.100
使用iproute2:
- $ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
- $ sudo ip neigh del 192.168.1.100 dev eth0
添加、刪除或查看多播地址
想配置或查看某個網(wǎng)絡接口上的多播地址,可以使用下列命令。
使用net-tools:
- $ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
- $ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
- $ ipmaddr show dev eth0
- $ netstat -g
使用iproute2:
- $ sudo ip maddr add 33:44:00:00:00:01 dev eth0
- $ sudo ip maddr del 33:44:00:00:00:01 dev eth0
- $ ip maddr list dev eth0
英文原文:http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html