1. eth0 eth0:1 eth0.1
eth0 eth0:1 和eth0.1三者的關系對應于實體網卡、子網卡、虛拟VLAN網卡的關系:
實體網卡:實體網卡這裡指的是伺服器上實際的網絡接口裝置,這裡我伺服器上雙網卡,在系統中看到的2個實體網卡分别對應是eth0和eth1這兩個網絡接口。
子網卡:子網卡在這裡并不是實際上的網絡接口裝置,但是可以作為網絡接口在系統中出現,如eth0:1、eth1:2這種網絡接口。它們必須要依賴于實體網卡,雖然可以與實體網卡的網絡接口同時在系統中存在并使用不同的IP位址,而且也擁有它們自己的網絡接口配置檔案。但是當所依賴的實體網卡不啟用時(Down狀态)這些子網卡也将一同不能工作。
虛拟VLAN網卡:這些虛拟VLAN網卡也不是實際上的網絡接口裝置,也可以作為網絡接口在系統中出現,但是與子網卡不同的是,他們沒有自己的配置檔案。他們隻是通過将實體網加入不同的VLAN而生成的VLAN虛拟網卡。如果将一個實體網卡通過vconfig指令添加到多個VLAN當中去的話,就會有多個VLAN虛拟網卡出現,他們的資訊以及相關的VLAN資訊都是儲存在/proc/net/vlan/config這個臨時檔案中的,而沒有獨自的配置檔案。它們的網絡接口名是eth0.1、eth1.2這種名字。
注意:當需要啟用VLAN虛拟網卡工作的時候,關聯的實體網卡網絡接口上必須沒有IP位址的配置資訊,并且,這些主實體網卡的子網卡也必須不能被啟用和必須不能有IP位址配置資訊。這個在網上看到的結論根據我的實際測試結果來看是不準确的,實體網卡本身可以綁定IP,并且給本征vlan提供通信網關的功能,但必須是在802.1q下。
/sbin/ifconfig 檢視、配置、啟用或禁用網絡接口(網卡)的工具
ifconfig
是一個用來檢視、配置、啟用或禁用網絡接口的工具,這個工具極為常用的。比如我們可以用這個工具來配置網卡的IP位址、MAC位址、掩碼、廣播位址等。值得一說的是用ifconfig
為網卡指定IP位址,這隻是用來調試網絡用的,并不會更改系統關于網卡的配置檔案。如果您想把網絡接口的IP位址固定下來,目前有三個方法:一是通過各個發行和版本專用的工具來修改IP位址;二是直接修改網絡接口的配置檔案;三是修改特定的檔案,加入ifconfig
指令來指定網卡的IP位址,比如在redhat或Fedora中,把ifconfig
的語名寫入/etc/rc.d/rc.local檔案中;
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
ifconfig配置網絡接口文法:
ifconfig 網絡端口 IP位址 hw MAC位址 netmask 掩碼位址 broadcast 廣播位址 [up/down]
ifconfig常用用法:
-
ifconfig
: 檢視主機激活狀态的網絡接口情況; 輸出結果中:lo 是表示主機的回壞位址,eth0 表示第一塊網卡, 其中 HWaddr
表示網卡的實體位址(MAC位址); inet addr 用來表示網卡的IP位址,Bcast表示廣播位址,Mask表示掩碼位址
- ifconfig -a : 檢視主機所有(包括沒有被激活的)網絡接口的情況
- ifconfig eth0 : 檢視特定網絡接口的狀态
- ifconfig eth0 down = ifup eth0 : 如果eth0是激活的,就把它終止掉。此指令等同于 ifdown eth0;
- ifconfig eth0 up = ifdown eth0 : 激活eth0 ; 此指令等同于 ifup eth0
- ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 : 配置 eth0的IP位址、廣播位址和網絡掩碼;
- ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 up : 配置IP位址、網絡掩碼、廣播位址的同時,激活網卡eth0
-
eth1 hw ether 00:11:00:00:11:22 : 設定網卡的實體位址(MAC位址)。其中 hw 後面所接的是網絡接口類型,
ether表示以太網, 同時也支援 ax25 、ARCnet、netrom等,詳情請檢視 man ifconfig ;
虛拟IP技術在高可用領域像資料庫SQLSERVER、web伺服器等場景下使用很多,很疑惑它是怎麼實作的,偶然,發現了一種方式可以實作虛拟ip。它的原理在于同一個實體網卡,是可以擁有多個ip位址的,至于虛拟網卡,也可用通過該方式擁有多個ip。 即對外提供資料庫伺服器的主機除了有一個真實IP外還有一個虛IP,使用這兩個IP中的 任意一個都可以連接配接到這台主機,所有項目中資料庫連結一項配置的都是這個虛IP,當伺服器發生故障無法對外提供服務時,動态将這個虛IP切換到備用主機。
其實作原理主要是靠TCP/IP的ARP協定。因為ip位址隻是一個邏輯位址,在以太網中MAC位址才是真正用來進行資料傳輸的實體位址,每台主機中都有一個ARP高速緩存,存儲同一個網絡内的IP位址與MAC位址的對應關系,以太網中的主機發送資料時會先從這個緩存中查詢目标IP對應的MAC位址,會向這個MAC位址發送資料。作業系統會自動維護這個緩存。這就是整個實作
的關鍵。
在eth0處引用别名,設定完子網路遮罩即可
ifconfig eth0:0 166.111.69.100 netmask 255.255.255.0 up
此時檢視網卡資訊
eth0 Link encap:Ethernet HWaddr 08:00:27:64:59:11
inet addr:166.111.69.17 Bcast:166.111.69.255 Mask:255.255.255.0
inet6 addr: 2402:f000:1:4412:a00:27ff:fe64:5911/64 Scope:Global
inet6 addr: fe80::a00:27ff:fe64:5911/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:597673 errors:0 dropped:0 overruns:0 frame:0
TX packets:215472 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:67285933 (67.2 MB) TX bytes:22782158 (22.7 MB)
eth0:0 Link encap:Ethernet HWaddr 08:00:27:64:59:11
inet addr:166.111.69.100 Bcast:166.111.69.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:843 errors:0 dropped:0 overruns:0 frame:0
TX packets:843 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:67174 (67.1 KB) TX bytes:67174 (67.1 KB)
然後找另一台機器ping這個vip(eth0:0)就可以看到顯示結果了。
寫在/etc/rc.local裡也可以,寫在這裡就不怕斷電後機器無法正常使用了。
更詳細參考:Linux-配置虛拟IP執行個體
用ifconfig 來配置虛拟網絡接口:
有時我們為了滿足不同的需要還需要配置虛拟網絡接口,比如我們用不同的IP位址來架運作多個HTTPD伺服器,就要用到虛拟位址;這樣就省卻了同一個IP位址,如果開設兩個的HTTPD伺服器時,要指定端口号。
虛拟網絡接口指的是為一個網絡接口指定多個IP位址,虛拟接口是這樣的 eth0:0 、 eth0:1、eth0:2 ... .. eth1N。當然您為eth1 指定多個IP位址,也就是 eth1:0、eth1:1、eth1:2 ... ...以此類推;
ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0 broadcast 192.168.1.255 up
注意:指定時,要為每個虛拟網卡指定不同的實體位址;
2. Lo
網絡配置一定需要有 環回接口,也就是loopback。

什麼接口是loopback?先看一個linux下面的配置:
[root@ZhouTianzuo ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2584 errors:0 dropped:0 overruns:0 frame:0
TX packets:2584 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:129200 (126.1 KiB) TX bytes:129200 (126.1 KiB
從配置可以看出,lo的mask僅為8bit,也就是說,隻要127開頭,任何網絡主機号都可以,也就是說環回接口可以了解為一個網絡号。
驗證一下,ping 127.0.0.1 127.0.1.1 127.1.1.1 126.1.1.1
linux:~ # ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.012 ms
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.012/0.015/0.019/0.005 ms
linux:~ #
linux:~ #
linux:~ # ping 127.0.1.1
PING 127.0.1.1 (127.0.1.1) 56(84) bytes of data.
64 bytes from 127.0.1.1: icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from 127.0.1.1: icmp_seq=2 ttl=64 time=0.010 ms
^C
--- 127.0.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.010/0.012/0.015/0.004 ms
linux:~ #
linux:~ # ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1) 56(84) bytes of data.
64 bytes from 127.1.1.1: icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from 127.1.1.1: icmp_seq=2 ttl=64 time=0.009 ms
64 bytes from 127.1.1.1: icmp_seq=3 ttl=64 time=0.010 ms
^C
--- 127.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.009/0.011/0.014/0.002 ms
linux:~ #
linux:~ # ping 126.1.1.1
PING 126.1.1.1 (126.1.1.1) 56(84) bytes of data.
^C
--- 126.1.1.1 ping statistics ---
31 packets transmitted, 0 received, 100% packet loss, time 30238ms
linux:~ #
可以,127這網絡号下面的主機編址都是loopback。
繼續這個,我們修改一下lo的位址,也是可以的:
[root@ZhouTianzuo ~]# ifconfig lo 130.0.0.1
[root@ZhouTianzuo ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:130.0.0.1 Mask:255.255.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3363 errors:0 dropped:0 overruns:0 frame:0
TX packets:3363 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:169619 (165.6 KiB) TX bytes:169619 (165.6 KiB)
[root@ZhouTianzuo ~]#
這個時候,預設的掩碼變成了16bits,也就是網絡130.0的下面的所有的主機都是loopback了,再ping之前的127.0.0.1也就不可能通了:
[root@ZhouTianzuo ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
無法通,這裡就不抓包了。
再看配置為32bits的掩碼,會有什麼情況:
[root@ZhouTianzuo ~]# ifconfig lo 130.0.0.1 netmask 255.255.255.255
[root@ZhouTianzuo ~]#
[root@ZhouTianzuo ~]# ifconfig lo
lo Link encap:Local Loopback
inet addr:130.0.0.1 Mask:255.255.255.255
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3363 errors:0 dropped:0 overruns:0 frame:0
TX packets:3363 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:169619 (165.6 KiB) TX bytes:169619 (165.6 KiB)
[root@ZhouTianzuo ~]#
[root@ZhouTianzuo ~]# ping 130.0.0.1
PING 130.0.0.1 (130.0.0.1) 56(84) bytes of data.
64 bytes from 130.0.0.1: icmp_seq=1 ttl=64 time=0.186 ms
^C
--- 130.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 925ms
rtt min/avg/max/mdev = 0.186/0.186/0.186/0.000 ms
[root@ZhouTianzuo ~]# ping 130.0.0.2
PING 130.0.0.2 (130.0.0.2) 56(84) bytes of data.
明顯ping 130.0.0.2就沒有這個ip了。
總結:環回接口可以配置,而且是一個網絡号,并非主機号,除非把掩碼配置為32bits。在tcp ip詳解裡面有提及,就是,net/2的實作,會把到不是完全比對ip的到lo的封包轉發,比如lo的配置為127.0.0.1,到lo 127.0.0.2的封包就會轉發,如此就不對了。