Linux netns:在一個實體介面上使用不同的IP運行不同的命令

Linux netns:在一個實體介面上使用不同的IP運行不同的命令

我有一個帶有 4 個 IPv4 位址的 Debian Stretch VPS。我想運行多個程序,將它們綁定到特定的 IP 位址(從不同的 IP 發出傳出 HTTP 請求)。例如命令

~$ curl icanhazip.com

會輸出特定的不同IP。

我做了什麼:

0) 從我的 ISP 訂購了額外的 IP

1) 編輯 /etc/network/interfaces 並新增額外的 IP:

# Initial configuration after ordering VPS
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug ens3 
iface ens3 inet static
    address 194.67.205.100
    netmask 255.255.252.0
    gateway 194.67.204.1

# Next lines were added by me
auto ens3:1
iface ens3:1 inet static
    address 185.125.216.101
    netmask 255.255.252.0

auto ens3:2
iface ens3:2 inet static
    address 185.125.216.102
    netmask 255.255.252.0

auto ens3:3
iface ens3:3 inet static
    address 185.125.216.103
    netmask 255.255.252.0

2)然後我為每個IP創建了netns

ip netns add ns1
ip netns add ns2
and so on

3)嘗試將介面加入新建立的netns中:

# ip link set ens3:1 netns ns1

4) 此時 SSH 連線中斷。如果我使用 VNC 登入並執行ip a,我會看到整個實體介面 ens3 及其所有子介面從主 netns 中消失。 命令輸出截圖

我做錯了什麼?如何將程式綁定到不同的來源IP位址?

PS我正在使用Python開發一個簡單的網站抓取工具,需要不同的IP來加速解析(每秒發出更多請求)並避免禁止。

答案1

給定的實體介面只能位於一個網路命名空間中,因此每個別名不能位於各自的命名空間中。一旦你開始移動一個,所有的東西都會移動,這解釋了你的觀察。

看這個問題:其自己的 netns 命名空間中的輔助 IP解釋為什麼會這樣,以及基於的解決方案macvlan(或者你可以做橋接、IP轉送或NAT)。

相關內容