如何管理Linux網(wǎng)絡(luò)命名空間 隔離網(wǎng)絡(luò)環(huán)境配置

linux網(wǎng)絡(luò)命名空間通過veth pair實(shí)現(xiàn)隔離與通信,管理步驟如下:1. 使用ip netns add/delete創(chuàng)建/刪除命名空間;2. 用ip link set啟用默認(rèn)lo接口;3. 創(chuàng)建veth pair并分配到命名空間;4. 分別配置兩端ip并啟用;5. 主機(jī)側(cè)開啟ip轉(zhuǎn)發(fā)和nat以實(shí)現(xiàn)跨命名空間通信;6. 可結(jié)合橋接設(shè)備統(tǒng)一管理多個(gè)命名空間路由;7. 利用ip netns exec執(zhí)行命名空間內(nèi)命令,通過nsenter調(diào)試進(jìn)程所在命名空間。

如何管理Linux網(wǎng)絡(luò)命名空間 隔離網(wǎng)絡(luò)環(huán)境配置

linux的網(wǎng)絡(luò)命名空間(Network Namespace)是實(shí)現(xiàn)網(wǎng)絡(luò)隔離的重要機(jī)制,尤其在容器技術(shù)中應(yīng)用廣泛。如果你需要為不同應(yīng)用或服務(wù)創(chuàng)建獨(dú)立的網(wǎng)絡(luò)環(huán)境,網(wǎng)絡(luò)命名空間是一個(gè)非常實(shí)用的工具

如何管理Linux網(wǎng)絡(luò)命名空間 隔離網(wǎng)絡(luò)環(huán)境配置

下面從幾個(gè)常見使用場(chǎng)景出發(fā),講講怎么管理Linux網(wǎng)絡(luò)命名空間來配置隔離的網(wǎng)絡(luò)環(huán)境。

如何管理Linux網(wǎng)絡(luò)命名空間 隔離網(wǎng)絡(luò)環(huán)境配置


創(chuàng)建和刪除網(wǎng)絡(luò)命名空間

最基本的兩個(gè)操作就是創(chuàng)建和刪除命名空間。

  • 使用 ip netns add 命令創(chuàng)建一個(gè)新的網(wǎng)絡(luò)命名空間:
    ip netns add ns1
  • 刪除一個(gè)不再使用的命名空間:
    ip netns delete ns1

每個(gè)新創(chuàng)建的命名空間默認(rèn)只有一個(gè)本地回環(huán)接口(lo),但這個(gè)接口是down狀態(tài),你需要手動(dòng)啟用它:

如何管理Linux網(wǎng)絡(luò)命名空間 隔離網(wǎng)絡(luò)環(huán)境配置

ip netns exec ns1 ip link set lo up

命名空間的名字必須是唯一的,并且不能包含特殊字符。建議用有意義的名稱,比如對(duì)應(yīng)的服務(wù)名或用途。


配置命名空間中的網(wǎng)絡(luò)連接

創(chuàng)建好命名空間之后,下一步通常是讓它能與其他網(wǎng)絡(luò)通信。常用方式是通過veth pair(虛擬以太網(wǎng)設(shè)備對(duì))將命名空間連接到主機(jī)或其他命名空間。

步驟如下:

  • 創(chuàng)建一對(duì)veth設(shè)備:

    ip link add veth0 type veth peer name veth1
  • 把其中一端放到命名空間里:

    ip link set veth1 netns ns1
  • 給兩端分別配置IP地址并啟用:

    ip addr add 192.168.1.1/24 dev veth0 ip link set veth0 up  ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth1 ip netns exec ns1 ip link set veth1 up

這樣,主機(jī)上的veth0和命名空間內(nèi)的veth1就形成了點(diǎn)對(duì)點(diǎn)連接。你可以在這個(gè)基礎(chǔ)上進(jìn)一步配置路由、NAT或者橋接。

需要注意的是:veth pair的兩端必須有一端留在默認(rèn)命名空間(即主機(jī))才能作為對(duì)外連接的入口。


跨命名空間通信與路由設(shè)置

如果多個(gè)命名空間之間需要互相通信,可以通過中間命名空間做路由轉(zhuǎn)發(fā),也可以使用橋接設(shè)備統(tǒng)一管理。

舉個(gè)例子,假設(shè)ns1和ns2都要訪問外部網(wǎng)絡(luò),可以考慮:

  • 創(chuàng)建一個(gè)bridge設(shè)備br0,把主機(jī)側(cè)的veth接口加入進(jìn)去
  • 分別給ns1和ns2分配不同的子網(wǎng)IP
  • 在主機(jī)上開啟IP轉(zhuǎn)發(fā),并設(shè)置NAT規(guī)則:
    sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

這種結(jié)構(gòu)適合模擬多租戶網(wǎng)絡(luò)或者搭建輕量級(jí)虛擬化測(cè)試環(huán)境。不過要注意防火墻規(guī)則和路由表的正確性,否則會(huì)出現(xiàn)“通不了”的問題。

另外,你可以在每個(gè)命名空間里運(yùn)行不同的服務(wù)監(jiān)聽不同端口,配合iptables還能做更細(xì)粒度的控制。


實(shí)際使用中的一些小技巧

  • 查看所有命名空間列表:

    ip netns list
  • 執(zhí)行命令時(shí)記得加 ip netns exec [namespace],否則命令會(huì)作用在主機(jī)默認(rèn)網(wǎng)絡(luò)空間。

  • 如果希望某個(gè)命名空間開機(jī)自動(dòng)啟動(dòng)并配置好網(wǎng)絡(luò),可以把相關(guān)命令寫進(jìn) /etc/network/interfaces 或者systemd服務(wù)文件中。

  • 使用 nsenter 工具可以從進(jìn)程進(jìn)入其所在的命名空間,方便調(diào)試。

基本上就這些。網(wǎng)絡(luò)命名空間雖然功能強(qiáng)大,但操作起來并不復(fù)雜,關(guān)鍵是理解veth pair和路由的關(guān)系。只要把基礎(chǔ)拓?fù)涓闱宄耍竺鏀U(kuò)展起來就容易多了。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享