Linux
Linux:是否有方便的方法來執行將其綁定到所選 IP 地址的程序?
在 FreeBSD 4.9 中,只需一個命令即可輕鬆完成,例如
jail [-u username] path hostname ip-number command
如果路徑是
/
你和往常一樣執行相同的程序,但它的所有網路通信都被限制為僅使用給定的 IP 地址作為源。有時它非常方便。現在在 Linux 中有 LXC,它看起來確實與 FreeBSD
jail
(或 Solaris 的區域)非常相似——你能想出類似的方式來執行程序嗎?
在只能看到所需 IP 地址的網路命名空間內啟動程序可以完成類似的操作。例如,假設我只希望 localhost 可用於特定程序。
首先,我創建網路命名空間:
ip netns add limitednet
命名空間預設有一個環回介面,所以接下來我只需要把它調出來:
sudo ip netns exec limitednet ip link set lo up
現在,我可以執行一個程序
ip netns exec limitednet
,它只能看到環回介面:sudo ip netns exec limitednet ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00: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
如果我想將其限制為 localhost 以外的地址,我可以使用以下命令將其他介面添加到命名空間中:
ip link set DEVICE_NAME netns NAMESPACE
在介面可能有多個 IP 地址的情況下,我必須進行更多試驗才能弄清楚如何將單個 IP 地址添加到命名空間中
LWN 關於命名空間的文章也很有幫助。