Рейтинг:0

Подключиться к Интернету через сетевое соединение внутри сетевого пространства имен без установки маршрута по умолчанию

флаг ca

Мне нужно сделать такую ​​​​настройку (с Linux):

  • Я хочу иметь сетевое пространство имен (скажем, weth_ns) с сетевым интерфейсом, подключенным к Интернету (weth0)
  • я хочу иметь разные сетевой интерфейс в качестве маршрута по умолчанию в пространстве имен хоста (eth0)
  • Я хочу как-то иметь возможность использовать такие вещи, как завиток, с некоторый тип интерфейса, чтобы прозрачно использовать сеть внутри это пространство имен для подключения к Интернету.

Ну вот так.

диаграмма

Кажется, я не могу заставить его работать. Что я сделал до сих пор:

ip netns добавить weth_ns
набор IP-ссылок weth0 netns weth_ns
ip netns exec weth_ns ip link set dev weth0 up
ip netns exec weth_ns ip a # чтобы увидеть список, чтобы убедиться, что он там есть
IP netns exec weth_ns dhclient weth0

ip netns exec weth_ns curl website.com # работает как положено

Это устанавливает пространство имен и помещает туда интерфейс. Это заставляет curl работать внутри пространства имен. Теперь я хочу как-то использовать изолированное соединение пространства имен с хоста.

Что я пытался сделать, так это настроить мост и настроить iptables внутри пространства имен. Итак, что я запускаю:

ip link добавить veth0_left тип veth peer veth0_right
IP-ссылка добавить мост типа bridge0
ip link set bridge0 вверх
ip addr add 10.9.0.0/24 dev bridge0 # 10.9.0.0 — это адрес, который я придумал
ip link set veth0_left master bridge0 up 
ip link set dev veth0_right netns weth_ns
ip netns exec weth_ns ip link set dev veth0_right up
ip netns exec mobile_ns ip addr add 10.9.0.1/24 dev veth0_right

Это добавляет мост; Теперь я могу успешно выполнить ping из пространства имен в пространство имен. Так что сам мост работает.

пинг 10.9.0.1 # работает
ip netns exec mobile_ns ping 10.9.0.0 # работает

И теперь мне нужно настроить iptables для использования соединения внутри пространства имен. Я подозреваю, что здесь я делаю какую-то ошибку. Вот что я собрал из разных интернет-источников:

ip netns exec mobile_ns bash
# все следующее внутри пространства имен bash:
iptables -t nat -A POSTROUTING -s 10.9.0.0/255.255.255.0 -o weth0 -j MASQUERADE
iptables -A FORWARD -i weth0 -o veth0_right -m состояние --state УСТАНОВЛЕНО,СВЯЗАННО -j ПРИНЯТЬ
iptables -A FORWARD -o weth0 -i veth0_right -m состояние --state УСТАНОВЛЕНО,СВЯЗАННО -j ПРИНЯТЬ

(все вовлеченные сети имеют /proc/sys/net/ipv4/conf/<сеть>/форвардинг установлено значение 1. Как внутри, так и снаружи пространства имен.)

И... не работает. Моя сеть теперь должна выглядеть так; но я не могу подключиться через curl. Либо с veth0_left или же мост0 сетевой интерфейс.

диаграмма 2

Должно быть, я где-то делаю что-то не так.


редактировать:

Уточнить, что значит "не работает".

curl --interface bridge0 8.8.8.8
curl: (7) Не удалось подключиться к порту 8.8.8.8 80: нет маршрута к хосту
curl --интерфейс veth0_left 8.8.8.8
curl: (7) Не удалось подключиться к порту 8.8.8.8 80: нет маршрута к хосту

Когда я пытаюсь увидеть tcpdump внутри пространства имен, я вижу кто имеет Запросы ARP, но только на интерфейсе моста. Кажется, он никогда не «заходит» в интерфейс weth0.

Рейтинг:0
флаг ca

Ах. Дело в том, что, завиток --интерфейс волшебным образом не обходит маршрутизацию.

Как объяснено здесь

https://superuser.com/questions/1223177/why-does-curl-not-work-with-non-default-network-interface-in-centos-6

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.