在Linux系統(tǒng)上使用nmcli命令配置各種網(wǎng)絡(luò)的操作方法(有線、無(wú)線、vlan、vxlan、路由、網(wǎng)橋等)
前言
你是否會(huì)遇到在不同的Linux系統(tǒng)中配置網(wǎng)絡(luò)時(shí),修改的配置文件和語(yǔ)法都不一樣的煩惱呢?
各種不同的文件路徑和語(yǔ)法,甚至Ubuntu系統(tǒng)中每隔幾代網(wǎng)絡(luò)配置文件就會(huì)變換位置和語(yǔ)法,這種情況非常不利于我們?nèi)粘?duì)系統(tǒng)的維護(hù)和管理。
對(duì)于這種情況,我們可以使用NetworkManager工具在不同的系統(tǒng)上進(jìn)行統(tǒng)一語(yǔ)法的配置與管理
現(xiàn)階段所發(fā)行的Linux版本基本都支持NetworkManager工具進(jìn)行統(tǒng)一管理
如果配置時(shí)發(fā)生語(yǔ)法錯(cuò)誤,該工具將會(huì)暫停修改該網(wǎng)絡(luò),不會(huì)造成配置文件錯(cuò)誤而導(dǎo)致的一系列問(wèn)題
甚至當(dāng)你將原網(wǎng)絡(luò)配置文件刪除后,只要使用命令創(chuàng)建一個(gè)和原先參數(shù)一樣的網(wǎng)絡(luò)接口,該配置文件就會(huì)自動(dòng)的重新生成
使用該工具配置的所有網(wǎng)絡(luò)配置文件會(huì)存于/etc/NetworkManager/system-connections/目錄下
PS:network-manager接管網(wǎng)絡(luò)后使用nmcli命令修改網(wǎng)卡的相關(guān)配置后都會(huì)永久生效(重啟網(wǎng)卡后依舊生效)
一、配置NetworkManager接管網(wǎng)絡(luò)(選)
如果系統(tǒng)默認(rèn)自帶了NetworkManager工具就不用做此步,如果是后期手動(dòng)安裝的就需要配置接管網(wǎng)絡(luò)
安裝Network-Manager并啟動(dòng)
apt install network-manager -y systemctl restart NetworkManager systemctl enable NetworkManager
配置NetworkManager接管網(wǎng)絡(luò)
語(yǔ)法:
nmcli net <on/off>
示例:
nmcli net on
netplan管理網(wǎng)絡(luò)的系統(tǒng)
如果是netplan管理網(wǎng)絡(luò)的系統(tǒng)(如ubuntu22.04)需要在netplan中指定NetworkManager接管網(wǎng)絡(luò):
vim /etc/netplan/00-installer-config.yaml # 每個(gè)系統(tǒng)的文件名都不一樣,我這里叫00-installer-config.yaml # 在version下添加,注意開頭對(duì)齊: renderer: NetworkManager 保存退出
使配置應(yīng)用到系統(tǒng)中
netplan apply
ifupdown管理網(wǎng)絡(luò)的系統(tǒng)
如果是ifupdown管理網(wǎng)絡(luò)的系統(tǒng)(如eve-ng或Ubuntu18.04)需要:
1、在NetworkManager配置中指定ifupdown也可管理網(wǎng)絡(luò),這樣如果系統(tǒng)原先存在有網(wǎng)絡(luò)連接,在NetworkManager接管后原網(wǎng)絡(luò)連接依舊存在不改變:
vim /etc/NetworkManager/NetworkManager.conf 修改以下內(nèi)容: managed=true 保存退出
2、創(chuàng)建.yaml文件并修改(如果原先存在有后綴為.yaml的文件,直接修改即可,沒有的話再創(chuàng)建)
vim /etc/netplan/interface.yaml 添加以下內(nèi)容: network: version: 2 renderer: NetworkManager 保存退出
3、暫時(shí)關(guān)閉系統(tǒng)網(wǎng)絡(luò)服務(wù)后使得netplan配置在系統(tǒng)生效并重啟NetworkManager服務(wù)
systemctl stop systemd-networkd netplan apply systemctl restart NetworkManager systemctl restart systemd-networkd
此時(shí)已經(jīng)可以通過(guò)nmcli管理網(wǎng)絡(luò)了
使用nmcli -p device查看設(shè)備狀態(tài)
nmcli -p device ============ 設(shè)備狀態(tài) ============ DEVICE TYPE STATE CONNECTION -------------------------------------------------- ens32 ethernet 已連接 有線連接 1 lo loopback 未托管 --
二、nmcli的相關(guān)配置(后置參數(shù)均可縮寫)
有線網(wǎng)絡(luò)配置
使用nmcli添加一個(gè)網(wǎng)卡并配置靜態(tài)ip地址
語(yǔ)法:
nmcli con add con-name <連接名> ifname <網(wǎng)卡名> type <連接類型> ipv4.method manual ipv4.addresses <ipv4地址> ipv4.gateway <ipv4網(wǎng)關(guān)地址> ipv4.dns <ipv4 dns服務(wù)器>
**注意:**如果想要添加兩個(gè)dns地址應(yīng)該用雙引號(hào)" "將兩個(gè)地址包起來(lái),表示兩個(gè)地址都是DNS地址
示例:
nmcli con add con-name test ifname ens32 type ethernet ipv4.method manual ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2 連接 "test" (3ceeec8a-d92c-42dd-ae10-2f5478eda991) 已成功添加
此時(shí)靜態(tài)地址就配置完成了,如果不進(jìn)行指定則NetworkManager默認(rèn)會(huì)在接口創(chuàng)建的時(shí)候自動(dòng)開啟該接口,當(dāng)然我們也可以指定某個(gè)接口的打開和關(guān)閉狀態(tài)
激活/關(guān)閉網(wǎng)卡
語(yǔ)法:
nmcli con {up/down} <連接名>
示例:
nmcli con up test 連接已成功激活(D-Bus 活動(dòng)路徑:/org/freedesktop/NetworkManager/ActiveConnection/2)
查看網(wǎng)卡信息
nmcli con show NAME UUID TYPE DEVICE test 3ceeec8a-d92c-42dd-ae10-2f5478eda991 ethernet ens32 有線連接 1 b640bf63-ac94-3547-be75-8fac06083304 ethernet --
使用nmcli修改一個(gè)網(wǎng)卡的地址
語(yǔ)法:
nmcli con modify <連接名> ipv4.method manual ipv4.addresses <新的ipv4地址> ipv4.gateway <新的ipv4網(wǎng)關(guān)地址> ipv4.dns <dns服務(wù)器>
示例:
nmcli con modify ens33 ipv4.method manual ipv4.addresses 192.168.10.20/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2
刷新網(wǎng)卡并查看信息
nmcli con up test ip add
使用nmcli添加一個(gè)網(wǎng)卡配置使其獲取動(dòng)態(tài)ip地址
語(yǔ)法:
nmcli con add con-name <連接名> ifname <網(wǎng)卡名> type <連接類型> ipv4.method auto
示例:
nmcli con add con-name test ifname ens32 type ethernet ipv4.method auto nmcli con up test # 激活網(wǎng)卡
使用nmcli將已有的靜態(tài)網(wǎng)卡配置修改為動(dòng)態(tài) 網(wǎng)卡配置
語(yǔ)法:
nmcli con modify <連接名> ipv4.method auto
示例:
nmcli con modify test ipv4.method auto nmcli con up test
然后需要將靜態(tài)地址刪除,否則使用ip add查看時(shí)會(huì)有兩個(gè)地址出現(xiàn)
nmcli connection modify test ipv4.addresses "" ipv4.gateway "" ipv4.dns "" # 將test的靜態(tài)地址設(shè)置為空,也就不存在了,只剩下了動(dòng)態(tài)地址
PS:需要先獲取到dhcp地址才能刪除原靜態(tài)配置,否則會(huì)提示"ipv4.method=manual 不允許這個(gè)屬性為空"
當(dāng)然,如果覺得麻煩,也可以將原靜態(tài)連接刪除后直接添加新的動(dòng)態(tài)地址配置,如下:
nmcli con del test nmcli con add con-name test ifname ens32 type ethernet ipv4.method auto
使用nmcli將已有的動(dòng)態(tài) 網(wǎng)卡配置修改為靜態(tài)網(wǎng)卡配置
語(yǔ)法:
nmcli con modify <連接名> ipv4.method manual ipv4.address <IP地址/子網(wǎng)掩碼> ipv4.gateway <網(wǎng)關(guān)> ipv4.dns <dns地址>
示例:
nmcli con modify test ipv4.method manual ipv4.address 192.168.10.20/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2 nmcli con up test
使用nmcli刪除一個(gè)網(wǎng)卡配置信息
語(yǔ)法:
nmcli con del <連接名>
示例:
nmcli con del test 成功刪除連接 "test" (3ceeec8a-d92c-42dd-ae10-2f5478eda991)
查看網(wǎng)卡信息
nmcli con show NAME UUID TYPE DEVICE 有線連接 1 b640bf63-ac94-3547-be75-8fac06083304 ethernet ens32
使用nmcli為一張網(wǎng)卡配置多個(gè)ip地址(從地址)
首先需要先創(chuàng)建一個(gè)連接使其獲得靜態(tài)或動(dòng)態(tài)ip地址才能在此基礎(chǔ)上增加地址,這里不再講述配置靜態(tài)或動(dòng)態(tài)地址的命令,直接進(jìn)行增加地址的配置
語(yǔ)法:
nmcli con modify <連接名> +ipv4.address <ipv4地址> ipv4.gateway <網(wǎng)關(guān)> ipv4.dns <dns地址>
示例:
nmcli con modify ens32 +ipv4.address 192.168.10.160/24 ipv4.gateway 192.168.10.254 ipv4.dns 114.114.114.114 nmcli con up ens32
使用nmcli修改網(wǎng)卡設(shè)備的連接名稱
語(yǔ)法:
nmcli con modify <原連接名或UUID值> connection.id <新連接名>
示例:
先查看網(wǎng)卡設(shè)備的各項(xiàng)信息
nmcli con show NAME UUID TYPE DEVICE 有線連接 1 b640bf63-ac94-3547-be75-8fac06083304 ethernet ens32
修改網(wǎng)卡設(shè)備的連接名稱為ens32
nmcli con modify b640bf63-ac94-3547-be75-8fac06083304 connection.id ens32
再次查看網(wǎng)卡設(shè)備的各項(xiàng)信息,可以發(fā)現(xiàn)NAME這一欄的名稱被修改了
nmcli con show NAME UUID TYPE DEVICE ens32 b640bf63-ac94-3547-be75-8fac06083304 ethernet ens32
無(wú)線網(wǎng)絡(luò)配置(需要有無(wú)線網(wǎng)卡)
打開/關(guān)閉無(wú)線網(wǎng)絡(luò)開關(guān)
語(yǔ)法:
nmcli radio all <on/off>
示例:
nmcli radio all on
查看無(wú)線網(wǎng)絡(luò)開關(guān)狀態(tài):
語(yǔ)法:
nmcli radio <all--默認(rèn)>
示例:
nmcli radio WIFI-HW WIFI WWAN-HW WWAN 已啟用 已啟用 已啟用 已啟用
連接無(wú)線網(wǎng)絡(luò)
掃描可用的無(wú)線網(wǎng)絡(luò)
nmcli device wifi list
這個(gè)命令會(huì)列出所有可用的無(wú)線網(wǎng)絡(luò)及其詳細(xì)信息。
連接到無(wú)線網(wǎng)絡(luò)
如果您知道無(wú)線網(wǎng)絡(luò)的 SSID(網(wǎng)絡(luò)名稱)和密碼,可以直接連接:
語(yǔ)法:
nmcli dev wifi connect <SSID> password <network-password>
示例:
nmcli device wifi con 李李密制十三香 password MySkillstree 設(shè)備 "wlx0013ef6f25bd" 成功以 "c2d01c8d-47e5-41ee-8a3c-171aaddf53a8" 激活。
如果您知道無(wú)線網(wǎng)絡(luò)的 SSID(網(wǎng)絡(luò)名稱)但不想顯示密碼,可以加入-a 或 --ask參數(shù),此參數(shù)會(huì)詢問(wèn)缺少的參數(shù)
語(yǔ)法:
nmcli -a device wifi con <SSID>
示例:
nmcli -a device wifi con 李李密制十三香 密碼: ???????????? 設(shè)備 "wlx0013ef6f25bd" 成功以 "afc44524-ba51-452b-ae51-21f2cd2b2f6f" 激活。
查看連接狀態(tài)
連接嘗試后,您可以檢查連接狀態(tài):
nmcli connection show NAME UUID TYPE DEVICE 李李密制十三香 afc44524-ba51-452b-ae51-21f2cd2b2f6f wifi wlx0013ef6f25bd
查看連接的詳細(xì)信息
語(yǔ)法:
nmcli connection show <connetcion-name>
示例:
nmcli connection show 李李密制十三香
開啟無(wú)線熱點(diǎn)(AP模式) 查看當(dāng)前無(wú)線網(wǎng)卡是否支持AP模式:
安裝iw命令
apt install iw -y
使用iw命令查看當(dāng)前無(wú)線網(wǎng)卡是否支持AP模式
iw list 或 # iw list | grep -A 20 "Supported interface modes:" | grep -B 10 "Band 1:"
查找到Supported interface modes:字段下是否有AP字樣,有則代表該無(wú)線網(wǎng)卡支持AP模式
添加無(wú)線網(wǎng)絡(luò)并關(guān)閉自動(dòng)連接
語(yǔ)法:
nmcli con add con-name <連接名> ifname <網(wǎng)卡名> type wifi 802-11-wireless.ssid <SSID> 802-11-wireless-security.key-mgmt <wpa-psk/wpa-eap/ieee8021x/none> 802-11-wireless-security.psk <預(yù)共享密鑰> autoconnect <on/off>
wpa-psk:這是使用預(yù)共享密鑰(PSK)的WPA(Wi-Fi Protected Access)安全模式。這種模式要求所有客戶端都使用相同的密碼進(jìn)行身份驗(yàn)證,是家庭和小型企業(yè)網(wǎng)絡(luò)中常用的安全方式。wpa-psk后加psk參數(shù)和預(yù)共享密鑰
wpa-eap:這是使用擴(kuò)展認(rèn)證協(xié)議(EAP)的WPA安全模式。結(jié)合WPA的安全性和802.1X的認(rèn)證機(jī)制,通常用于需要更高安全性的場(chǎng)景,如企業(yè)網(wǎng)絡(luò)。wpa-eap后可加的參數(shù)有:802-1x.eap、802-1x.phase2-auth、802-11-wireless-security.psk、802-1x.cert-path/802-1x.private-key-path、用戶名和密碼等
ieee8021x:這是使用802.1X認(rèn)證協(xié)議的安全模式。在這種模式下,客戶端需要通過(guò)認(rèn)證服務(wù)器(如RADIUS服務(wù)器)進(jìn)行身份驗(yàn)證。ieee8021x后可加的參數(shù)有:認(rèn)證方法(如:802-1x.eap)、證書和私鑰(如:EAP-TLS)、認(rèn)證服務(wù)器(如:RADIUS服務(wù)器)、用戶身份和密碼(802-1x.identity指定用戶名和802-1x.password指定密碼)等
none:這表示不使用密鑰管理,即無(wú)線網(wǎng)絡(luò)不使用加密或身份驗(yàn)證。這種方式非常不安全,不建議在公共或未受保護(hù)的環(huán)境中使用
示例:
使用wpa-psk模式創(chuàng)建一個(gè)最常用的無(wú)線網(wǎng)絡(luò)連接安全模式,我這里的無(wú)線網(wǎng)卡設(shè)備名為:wlx0013ef6f25bd
nmcli con add con-name MySkillstree ifname wlx0013ef6f25bd type wifi 802-11-wireless.ssid MySkillstree 802-11-wireless.mode ap 802-11-wireless-security.key-mgmt wpa-psk 802-11-wireless-security.psk a1234567 autoconnect no 連接 "MySkillstree" (7f0c422d-644e-4c98-b615-8eac99304139) 已成功添加。
以上配置命令過(guò)長(zhǎng)和繁瑣,可以簡(jiǎn)寫為以下命令:
nmcli con add con-name MySkillstree ifname wlx0013ef6f25bd type wifi ssid MySkillstree mode ap wifi-sec.key-mgmt wpa-psk wifi-sec.psk a1234567 autoconnect no 連接 "MySkillstree" (7f0c422d-644e-4c98-b615-8eac99304139) 已成功添加。
其中:
802-11-wireless.ssid 可縮寫為 ssid
802-11-wireless.mode ap 可縮寫為 mode ap
802-11-wireless-security 可縮寫為 wifi-sec
當(dāng)然如果就只使用wpa-psk模式創(chuàng)建簡(jiǎn)單的個(gè)人熱點(diǎn),也可以使用device參數(shù)進(jìn)行快速創(chuàng)建
nmcli device wifi hotspot con-name MySkillstree ifname wlx0013ef6f25bd ssid MySkillstree password a1234567 設(shè)備 "wlan0" 成功以 "1facecb6-bf75-461a-b847-b63911bb3f61" 激活。 提示:"nmcli dev wifi show-password" 顯示 Wi-Fi 名稱和密碼。
為無(wú)線網(wǎng)卡接口配置地址
nmcli con modify MySkillstree ipv4.method manual ipv4.address 10.0.0.1/24
安裝dhcp服務(wù)
用于下發(fā)無(wú)線熱點(diǎn)和管理連接到熱點(diǎn)的設(shè)備的 DNS 和 DHCP(ubuntu、kali中為isc-dhcp-server,在centos中為dhcpd)
apt install isc-dhcp-server vim /etc/dhcp/dhcpd.conf 修改以下內(nèi)容: subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.2 10.0.0.100; option domain-name-servers 114.114.114.114; option subnet-mask 255.255.255.0; option routers 10.0.0.1; option broadcast-address 10.0.0.255; } 保存退出
指定dhcp服務(wù)下發(fā)地址的物理接口(當(dāng)系統(tǒng)中存在多個(gè)網(wǎng)卡設(shè)備,不做會(huì)報(bào)錯(cuò))
vim /etc/default/isc-dhcp-server 修改以下內(nèi)容: INTERFACESv4="wlx0013ef6f25bd" 保存退出
進(jìn)行源地址轉(zhuǎn)換SNAT
網(wǎng)關(guān)默認(rèn)是不知道我們自己創(chuàng)建的這個(gè)ip地址的,只有使用地址轉(zhuǎn)換技術(shù)NAT將無(wú)線網(wǎng)卡上的收到的地址轉(zhuǎn)換成我們連接公網(wǎng)的地址才能正常訪問(wèn)互聯(lián)網(wǎng)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens32 -j MASQUERADE
查看SNAT轉(zhuǎn)換列表
iptables -t nat -nvL POSTROUTING Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE 0 -- * ens32 10.0.0.0/24 0.0.0.0/0
開啟路由轉(zhuǎn)發(fā)
Linux系統(tǒng)默認(rèn)不轉(zhuǎn)發(fā)路由,只有開啟路由轉(zhuǎn)發(fā)后才會(huì)轉(zhuǎn)發(fā)其他網(wǎng)卡接受到的數(shù)據(jù)包
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
重啟DHCP服務(wù)和新建WiFi熱點(diǎn)
systemctl restart isc-dhcp-server nmcli con up MySkillstree
此時(shí)通過(guò)手機(jī)連接到熱點(diǎn)后可以正確獲取地址和上網(wǎng)
這里還有一點(diǎn)要注意:
如果是外接的usb無(wú)線網(wǎng)卡到虛擬機(jī)內(nèi),有可能會(huì)導(dǎo)致驅(qū)動(dòng)和內(nèi)核不匹配,即使無(wú)線網(wǎng)卡支持AP模式也能正常連接WiFi,但是在開啟個(gè)人熱點(diǎn)時(shí)依舊會(huì)報(bào)錯(cuò)802.1x認(rèn)證超時(shí)
當(dāng)然以上情況會(huì)有但是不常見,但還是建議開啟個(gè)人熱點(diǎn)的話還是在自帶wifi模塊的Linux物理機(jī)上進(jìn)行比較好
其他設(shè)置:
對(duì)于其他設(shè)置如:動(dòng)靜態(tài)地址,修改連接名稱,刪除連接等均與有線網(wǎng)絡(luò)設(shè)置一樣,這里就不在講述
VLAN相關(guān)配置
創(chuàng)建vlan
創(chuàng)建一個(gè)vlan100接口并將物理網(wǎng)卡ens32綁定到vlan100中,這里的vlan是虛擬設(shè)備常被用做子接口配置,同樣bond和team類型的網(wǎng)絡(luò)接口也可以被配置為子接口
語(yǔ)法:
nmcli con add con-name <連接名稱> ifname <接口名稱> type vlan id <vlan-id> dev <網(wǎng)卡設(shè)備> ipv4.method manual ipv4.address <ipv4地址> ipv4.gateway <網(wǎng)關(guān)> ipv4.dns <dns地址>
示例:
nmcli con add con-name vlan100 ifname vlan100 type vlan id 100 dev ens32 ipv4.method manual ipv4.address 192.168.100.100/24 ipv4.gateway 192.168.100.254 ipv4.dns 114.114.114.114
網(wǎng)橋Bridge配置
bridge 是內(nèi)核提供的虛擬以太網(wǎng)橋,原理上類似于物理交換機(jī),工作在第二層,可以將多個(gè)以太網(wǎng)接口連接在一起,使它們成為一個(gè)邏輯上的以太網(wǎng)段。這樣,在同一個(gè)網(wǎng)橋上的設(shè)備可以直接通信,就像它們連接在同一個(gè)物理以太網(wǎng)上一樣,同樣也可以配置生成樹(STP)協(xié)議
要注意的是,綁定為bridge上的成員接口都無(wú)法配置地址且可以和bridge共用一個(gè)地址,如果要配置地址進(jìn)行通信,可以配置子接口進(jìn)行通信
創(chuàng)建名為br-vxlan的網(wǎng)橋
創(chuàng)建一個(gè)名為br-vxlan的網(wǎng)橋且不設(shè)置ip地址
語(yǔ)法:
nmcli con add con-name <連接名> ifname <接口名> type bridge ipv4.method disabled ipv6.method disabled
示例:
nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled
VXLAN配置
VXLAN可將二層報(bào)文用四層協(xié)議進(jìn)行封裝,即在四層網(wǎng)絡(luò)的基礎(chǔ)上構(gòu)建一個(gè)虛擬的二層網(wǎng)絡(luò)進(jìn)行二層通信,包括廣播
注意?。?!
1、請(qǐng)事先關(guān)閉或放行防火墻和SELinux等
2、以下實(shí)驗(yàn)如果是兩個(gè)ubuntu虛擬機(jī)且其中一個(gè)是克隆,配置VXLAN時(shí)當(dāng)接口名稱(ifname)一樣時(shí)可能會(huì)出現(xiàn)兩個(gè)vxlan接口的MAC地址一樣的情況。
正常來(lái)講Mac地址是唯一的,但是可能因?yàn)槭莢mware的小bug吧,導(dǎo)致罕見的Mac地址會(huì)沖突
此時(shí)可以更改接口名稱(ifname)為其他的,只要VNI也就是vxlan的id值一樣就不影響,或者使用工具將某一vxlan接口的mac地址修改但這種方法通常關(guān)機(jī)后會(huì)恢復(fù)
這種情況下使用wireshark抓包只能抓到對(duì)放發(fā)來(lái)的arp報(bào)文,但是沒有arp回應(yīng)報(bào)文,因?yàn)殡p方的mac地址一樣,會(huì)被誤以為是自己發(fā)的,就不會(huì)發(fā)送arp回復(fù)報(bào)文。
單播模式(點(diǎn)對(duì)點(diǎn))
語(yǔ)法:
nmcli con add con-name <連接名> ifname <接口名> type vxlan id <vni> local <本地地址> remote <對(duì)端地址> destination-port <UDP端口,默認(rèn)為4789> dev <設(shè)備名> ipv4.method manual ipv4.address <ipv4地址> ipv4.gateway <網(wǎng)關(guān)> ipv4.dns <dns地址>
示例:
創(chuàng)建名為 vxlan100 的 vxlan 接口,指定其 vni、對(duì)端 ip、目的 udp 端口和本設(shè)備上承載 vxlan 流量的物理接口
nmcli con add con-name vxlan100 ifname vxlan100 type vxlan id 100 local 192.168.10.100 remote 192.168.10.200 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.16.0.1/24 ipv4.gateway 172.16.0.254nmcli con up vxlan100
查看 vxlan0 的詳細(xì)信息
ip -d link show vxlan100
查看系統(tǒng)路由表會(huì)發(fā)現(xiàn)多了172.16.1.0/24網(wǎng)段的路由表
route -n 內(nèi)核 IP 路由表 目標(biāo) 網(wǎng)關(guān) 子網(wǎng)掩碼 標(biāo)志 躍點(diǎn) 引用 使用 接口 0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens32 0.0.0.0 172.16.0.254 0.0.0.0 UG 20500 0 0 vxlan100 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens32 172.16.0.0 0.0.0.0 255.255.255.0 U 500 0 0 vxlan100 192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
查看vxlan的fdb表(轉(zhuǎn)發(fā)表)
bridge fdb show dev vxlan100 00:00:00:00:00:00 dst 192.168.10.200 via ens32 self permanent
這個(gè)表項(xiàng)的意思是,默認(rèn)的VTEP對(duì)端地址為 192.168.10.200。換句話說(shuō),原始報(bào)文經(jīng)過(guò)vxlan0后,會(huì)被內(nèi)核加上VXLAN頭部,而外部UDP頭部的目的IP地址為192.168.10.200(源VTEP封包過(guò)程)
此時(shí)對(duì)端設(shè)備也配置vxlan100
保證VNI也是100,dstport也是4789,并修改VTEP的local和remote IP地址的值
nmcli con add con-name vxlan100 ifname vxlan100 type vxlan id 100 local 192.168.10.200 remote 192.168.10.100 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.16.0.2/24 ipv4.gateway 172.16.0.254 nmcli con up vxlan100
ping測(cè)試
ping 172.16.0.2 -I 172.16.0.1
多播模式(點(diǎn)對(duì)多點(diǎn))
要組成同一個(gè)VXLAN網(wǎng)絡(luò),VTEP必須能夠感知到彼此的存在,多播組本身的功能就是把網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)組成一個(gè)虛擬的組,所以VXLAN最初想到用多播來(lái)實(shí)現(xiàn)也是很自然的。
注意,如果VXLAN要使用多播,那么底層網(wǎng)絡(luò)結(jié)構(gòu)需要支持多播功能
本實(shí)驗(yàn)與前面的實(shí)驗(yàn)比較相似,只不過(guò)主機(jī)之間不是點(diǎn)對(duì)點(diǎn)的連接,而是通過(guò)多播組成一個(gè)虛擬的整體。
在host1配置,使用多播模式
此時(shí)參數(shù)remote應(yīng)指定相同的多播地址(范圍: 224.0.0.0~239.255.255.255)
nmcli con add con-name vxlan101 ifname vxlan101 type vxlan id 101 local 192.168.10.100 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.17.0.1/24 ipv4.gateway 172.17.0.254 nmcli con up vxlan101
在host2配置,使用多播模式
此時(shí)參數(shù)remote應(yīng)指定相同的多播地址(范圍: 224.0.0.0~239.255.255.255)
nmcli con add con-name vxlan101 ifname vxlan101 type vxlan id 101 local 192.168.10.200 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.17.0.2/24 ipv4.gateway 172.17.0.254 nmcli con up vxlan101
互ping測(cè)試
VXLAN+網(wǎng)橋網(wǎng)絡(luò)(Bridge)+組播
上述的點(diǎn)對(duì)點(diǎn) VXLAN 網(wǎng)絡(luò)通信雙方只有一個(gè) VTEP,且只有一個(gè)通信實(shí)體,而在實(shí)際生產(chǎn)中(主要是云服務(wù)器),每臺(tái)物理機(jī)上都有幾十臺(tái)甚至上百臺(tái)虛擬機(jī)或容器需要通信,因此需要一種機(jī)制將這些通信實(shí)體組織起來(lái),再通過(guò)隧道口 VTEP 轉(zhuǎn)發(fā)出去。
方案其實(shí)也很常見,Linux Bridge 就可以將多塊虛擬網(wǎng)卡連接起來(lái),因此可以選擇使用 Bridge 將多個(gè)虛擬機(jī)或容器放到同一個(gè) VXLAN 網(wǎng)絡(luò)中。和上面的模式相比,這里只是多了一個(gè) Bridge,用來(lái)連接不同 network namespace (網(wǎng)絡(luò)名稱空間)中的 veth pair,同時(shí) VXLAN 網(wǎng)卡也需要連接到該 Bridge
其實(shí)說(shuō)大白話就是:
- 點(diǎn)對(duì)點(diǎn)的是設(shè)備-1和設(shè)備-2的虛擬二層通信;
- 多播是多個(gè)設(shè)備之間的虛擬二層通信;
- 而VXLN+Bridge則多用于多設(shè)備內(nèi)都開了很多虛擬機(jī),這些虛擬機(jī)跨物理機(jī)之間的虛擬二層通信的云計(jì)算場(chǎng)景
題目:
- 在兩臺(tái)物理設(shè)備上創(chuàng)建網(wǎng)絡(luò)命名空間ns0和ns1,veth pair
- 新建vxlan隧道,網(wǎng)橋名稱為 br-vxlan,網(wǎng)橋的出口為vxlan103,id為103
- 設(shè)備-1的vxlan隧道地址為172.18.0.1/24,設(shè)備-2的vxlan隧道地址為172.18.0.2/24.
- 新建網(wǎng)橋bridge,將vxlan網(wǎng)絡(luò)和veth pair綁定到bridge上
- 測(cè)試不同設(shè)備中命名空間內(nèi)網(wǎng)絡(luò)的二層聯(lián)通性。
注意??!!
以下實(shí)驗(yàn)如果是在兩臺(tái)ubuntu虛擬機(jī)上做的,且一臺(tái)為克隆,最好將vxlan,bridge,veth pair的ifname修改,否則可能會(huì)有mac地址沖突的情況發(fā)生,會(huì)導(dǎo)致實(shí)驗(yàn)結(jié)果不通
host1創(chuàng)建vxlan+bridge+組播網(wǎng)絡(luò):
# 創(chuàng)建vxlan網(wǎng)絡(luò),如果ipv6.method disabled不可用,也可以將disabled換成ignore,主要是為了讓其不獲取地址 nmcli con add con-name vxlan102 ifname vxlan102 type vxlan id 102 local 192.168.10.100 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method disabled ipv6.method disabled # 然后創(chuàng)建網(wǎng)橋 br0,把 VXLAN 網(wǎng)卡 vxlan102 綁定到上面,如果ipv6.method disabled不可用,也可以將disabled換成ignore,主要是為了讓其不獲取地址 nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled nmcli con modify vxlan102 master br0 # 刷新vxlan102 nmcli con up vxlan102 # 下面創(chuàng)建一對(duì)veth pair(veth0和veth1) ip link add veth0 type veth peer name veth1 # 把veth pair一端veth0綁定到網(wǎng)橋 ip link set veth0 master br0 ip link set veth0 up # 創(chuàng)建命名空間 ip netns add ns0 # 把veth pair一端veth1放到命名空間 ip link set dev veth1 netns ns0 # 給veth1設(shè)置ip ip netns exec ns0 ip addr add 172.18.0.1/24 dev veth1 # 把veth1 和 lo up ip netns exec ns0 ip link set lo up ip netns exec ns0 ip link set veth1 up # 查看 ns0 的網(wǎng)卡信息 ip netns exec ns0 ip add
host2創(chuàng)建vxlan+bridge+組播網(wǎng)絡(luò):
# 創(chuàng)建vxlan網(wǎng)絡(luò),如果ipv6.method disabled不可用,也可以將disabled換成ignore,主要是為了讓其不獲取地址 nmcli con add con-name vxlan102 ifname vxlan102 type vxlan id 102 local 192.168.10.200 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method disabled ipv6.method disabled # 然后創(chuàng)建網(wǎng)橋 br0,把 VXLAN 網(wǎng)卡 vxlan102 綁定到上面,如果ipv6.method disabled不可用,也可以將disabled換成ignore,主要是為了讓其不獲取地址 nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled nmcli con modify vxlan102 master br0 # 刷新vxlan102 nmcli con up vxlan102 # 下面創(chuàng)建一對(duì)veth pair(veth0和veth1) ip link add veth0 type veth peer name veth1 # 把veth pair一端veth0綁定到網(wǎng)橋 ip link set veth0 master br0 ip link set veth0 up # 創(chuàng)建命名空間 ip netns add ns1 # 把veth pair一端veth1放到命名空間 ip link set dev veth1 netns ns1 # 給veth1設(shè)置ip ip netns exec ns1 ip addr add 172.18.0.2/24 dev veth1 # 把veth1 和 lo up ip netns exec ns1 ip link set lo up ip netns exec ns1 ip link set veth1 up # 查看 ns1 的網(wǎng)卡信息 ip netns exec ns1 ip add
互ping測(cè)試,隧道建立需要一定時(shí)間,可以耐心等一會(huì)
Veth Pair配置
Veth Pair是成對(duì)的虛擬網(wǎng)卡,使用ip命令可以創(chuàng)建但是在重啟系統(tǒng)后就會(huì)失效,而nmcli命令創(chuàng)建的所有連接在重啟系統(tǒng)后都還會(huì)生效
在centos7/8中并不支持使用nmcli命令配置,而在新版的ubuntu和kali中是支持的,預(yù)計(jì)在以后的發(fā)行版中也是會(huì)支持的
添加一對(duì)Veth網(wǎng)卡
語(yǔ)法:
nmcli con add con-name <連接名> ifname <網(wǎng)卡名> type veth peer <對(duì)端網(wǎng)卡名>
示例:
注意配置時(shí)需要配置一對(duì)
nmcli con add con-name veth0 ifname veth0 type veth peer veth1 nmcli con add con-name veth1 ifname veth1 type veth peer veth0
此時(shí)veth會(huì)默認(rèn)關(guān)閉,可以通過(guò)添加之前內(nèi)容中添加靜態(tài)地址的方式添加相應(yīng)的網(wǎng)卡配置后開啟
示例:
nmcli con modify veth0 ipv4.method manual ipv4.address 192.168.10.10/24 nmcli con up veth0
注意:
在Ubuntu上配置veth后,關(guān)機(jī)重啟,該對(duì)veth中的一個(gè)會(huì)因?yàn)槟撤N原因(暫時(shí)還不知道)無(wú)法連接,此時(shí)需要重啟NetworkManager服務(wù)后重新打開該對(duì)veth網(wǎng)卡
systemctl restart NetworkManager nmcli con up veth0 nmcli con up veth1
靜態(tài)路由相關(guān)配置
添加靜態(tài)路由和優(yōu)先級(jí)
語(yǔ)法:
nmcli con modify <連接名> ipv4.routes "<目標(biāo)網(wǎng)段/子網(wǎng)掩碼> <下一跳>" 或 nmcli con modify <連接名> ipv4.routes "<目標(biāo)網(wǎng)段/子網(wǎng)掩碼> <下一跳> <優(yōu)先級(jí)>" nmcli con up <連接名>
示例:
nmcli con modify ens32 ipv4.routes "10.0.0.0/24 192.168.10.2 99" nmcli con up ens32
查看系統(tǒng)路由表
route -n
刪除靜態(tài)路由
語(yǔ)法:
nmcli con modify <連接名> -ipv4.routes "<目標(biāo)網(wǎng)段/子網(wǎng)掩碼> <下一跳>" nmcli con up <連接名>
示例:
nmcli con modify ens32 -ipv4.routes "10.0.0.0/24 192.168.10.2" nmcli con up ens32
注意:
1、在命令中如果未設(shè)置優(yōu)先級(jí)則默認(rèn)為100,默認(rèn)路由的值不一定,有的為100有的為20100;
2、優(yōu)先級(jí)越小越優(yōu)先,如:100 > 110
3、由網(wǎng)關(guān)生成的默認(rèn)路由的優(yōu)先級(jí)無(wú)法更改
4、刪除靜態(tài)路由無(wú)需添加優(yōu)先級(jí)選項(xiàng)
三、總結(jié)
這其中當(dāng)屬無(wú)線網(wǎng)絡(luò)的AP模式開啟和兩個(gè)ubuntu系統(tǒng)配置Vxlan上最耗費(fèi)時(shí)間
因?yàn)槭翘摂M機(jī),會(huì)遇到各種各樣的不適配或者其他bug,都需要一樣找出問(wèn)題來(lái)
目前這里暫時(shí)只展現(xiàn)這些最常用的配置示例,目的是為了讓大家在以后面對(duì)各式各樣的Linux系統(tǒng)時(shí)能夠更便捷的進(jìn)行統(tǒng)一的網(wǎng)絡(luò)配置
以上就是在Linux系統(tǒng)上使用nmcli命令配置各種網(wǎng)絡(luò)的操作方法(有線、無(wú)線、vlan、vxlan、路由、網(wǎng)橋等)的詳細(xì)內(nèi)容,更多關(guān)于Linux nmcli配置各種網(wǎng)絡(luò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Shell中的單中括號(hào)和雙中括號(hào)的用法詳解
shell中的中括號(hào)在條件測(cè)試中是使用最頻繁的,無(wú)論是中括號(hào)還是雙中括號(hào),可用于一些條件的測(cè)試:算術(shù)比較、文件屬性測(cè)試、字符串比較。這篇文章主要介紹了Shell中的單中括號(hào)和雙中括號(hào)的用法詳解,需要的朋友可以參考下2022-12-12Linux 使用init命令實(shí)現(xiàn)關(guān)機(jī),重啟,切換模式
這篇文章主要介紹了Linux 使用init命令實(shí)現(xiàn)關(guān)機(jī),重啟,切換模式的相關(guān)資料,需要的朋友可以參考下2017-03-03DDNS 的工作原理及其在 Linux 上的實(shí)現(xiàn)
DDNS (Dynamic DNS) 擴(kuò)展了 DNS 將客戶端 IP 與其域名進(jìn)行靜態(tài)映射的功能,它可以將同一域名實(shí)時(shí)地解析為不同的動(dòng)態(tài) IP,而不需要額外的人工干預(yù)2016-09-09