Linux

Linux:是否有方便的方法來執行將其綁定到所選 IP 地址的程序?

  • February 1, 2019

在 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 關於命名空間的文章也很有幫助。

引用自:https://unix.stackexchange.com/questions/155446