私は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 を実行する)の両方の説明。