Linux netns: 1 つの物理インターフェース上で異なる IP で異なるコマンドを実行する

Linux netns: 1 つの物理インターフェース上で異なる 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 全体とそのすべてのサブインターフェイスがメイン ネットワークから消えていることがわかります。 コマンド出力のスクリーンショット

何が間違っているのでしょうか? プログラムを異なるソース IP アドレスにバインドするにはどうすればよいでしょうか?

PS: Python を使用してシンプルなサイト スクレーパーを開発していますが、解析を高速化 (1 秒あたりのリクエスト数を増やす) して禁止を回避するために、異なる IP が必要です。

答え1

特定の物理インターフェースは 1 つのネットワーク名前空間にのみ存在できるため、各エイリアスは独自の名前空間に存在することはできません。1 つを移動し始めるとすぐにすべてが移動します。これが、あなたの観察を説明しています。

この質問を参照してください:独自の netns 名前空間内のセカンダリ IPなぜそうなるのか、またそれに基づいた解決策macvlan(またはブリッジ、IP 転送、NAT を実行する)の両方の説明。

関連情報