Linux NetNS: запускать разные команды с разными IP на одном физическом интерфейсе
У меня есть Debian Stretch VPS с 4 IPv4-адресами. Я хочу запустить несколько программ, привязав их к определенным IP-адресам (для отправки исходящих HTTP-запросов с разных IP-адресов). Так, например, команда
~$ curl icanhazip.com
будет выводить конкретные разные IP-адреса.
Что я сделал:
0) Заказал дополнительные 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) Затем я создал netns для каждого IP
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 ответ
Данный физический интерфейс может находиться только в одном сетевом пространстве имен, поэтому каждый из ваших псевдонимов не может находиться в своих собственных пространствах имен. Как только вы начинаете двигаться, все будет двигаться, что объясняет ваши наблюдения.
Посмотрите на этот вопрос: Вторичный IP в своем собственном пространстве имен netns для обоих объяснений, почему это так, а также для решения, основанного на macvlan
(или иначе вы можете сделать мосты, переадресацию IP или NAT).