Linux netns:在一个物理接口上使用不同的IP运行不同的命令

Linux netns:在一个物理接口上使用不同的IP运行不同的命令

我有一台 Debian Stretch VPS,有 4 个 IPv4 地址。我想运行几个程序,并将它们绑定到特定的 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)尝试向新创建的网络添加接口:

# ip link set ens3:1 netns ns1

4) 此时 SSH 连接断开。如果我使用 VNC 登录并执行ip a,我会看到整个物理接口 ens3 及其所有子接口都从主网络中消失了。 命令输出截图

我做错了什么?如何将程序绑定到不同的源 IP 地址?

PS 我正在使用 Python 开发一个简单的网站抓取工具,需要不同的 IP 来加快解析速度(每秒发出更多请求)并避免被禁止。

答案1

给定的物理接口只能位于一个网络命名空间中,因此您的每个别名不能位于其自己的命名空间中。一旦您开始移动一个,所有内容都会移动,这解释了您的观察结果。

请参阅这个问题:位于其自己的 netns 命名空间中的辅助 IP对于为什么会这样,既要解释一下,也要提出一个解决方案macvlan(或者你也可以进行桥接、IP 转发或 NAT)。

相关内容