Я хотел бы установить три виртуальных сетевых интерфейса ( veth
), которые могут взаимодействовать друг с другом. Для имитации кластера из трех узлов каждая программа затем связывается с одним veth
интерфейсом. Я хотел бы сделать это без LXC, если это возможно.
Я пытался с помощью:
- Создано три
veth
пары:sudo ip link add type veth
- Создан мост
sudo brctl addbr br0
- Добавлен один из каждой пары к мосту:
sudo brctl addif br0 veth1
sudo brctl addif br0 veth3
sudo brctl addif br0 veth5
- Настроил интерфейсы:
sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up
Тогда я проверил, если это работает с использованием: ping -I veth0 10.0.0.202
но это не так :(
Я добавил IP - адрес к veth1
, veth3
, veth5
и br0
интерфейсы в диапазоне 10.0.1.x / 24. Но это не помогает.
Любые идеи? или руководство, все, что я нахожу в том, как использовать его с LXC. Или я пытаюсь сделать что-то невозможное?
linux
networking
Reinder
источник
источник
br0
само по себе?Ответы:
Для работы veth один конец туннеля должен быть соединен с другим интерфейсом. Поскольку вы хотите сохранить все это виртуальным, вы можете соединить конец туннеля vm1 (другой конец туннеля vm2) с виртуальным интерфейсом типа ответвления в мосте, называемом brm. Теперь вы даете IP-адреса brm и vm2 (10.0.0.1 и 10.0.0.2 соответственно), включаете пересылку IPv4 с помощью
подключите все интерфейсы и добавьте маршрут, указывающий ядру, как достичь IP-адресов 10.0.0.0/24. Вот и все.
Если вы хотите создать больше пар, повторите описанные ниже шаги с другими подсетями, например, 10.0.1.0/24, 10.0.2.0/24 и т. Д. Поскольку вы включили пересылку IPv4 и добавили соответствующие маршруты в таблицу маршрутизации ядра, они смогут сразу общаться друг с другом.
Также помните, что большинство команд, которые вы используете (brctl, ifconfig, ...), устарели: в пакете iproute2 есть команды для всего этого, см. Ниже мое использование команды ip .
Это правильная последовательность команд для использования интерфейсов типа veth :
сначала создайте все необходимые интерфейсы,
Обратите внимание, что мы не вызывали brm и vm2, потому что мы должны назначить им IP-адреса, но мы вызвали tapm и vm1, что необходимо для включения их в мост brm. Теперь поработите интерфейсы tapm и vm1 с мостом brm,
теперь дайте адреса мосту и оставшемуся ветхому интерфейсу vm2,
теперь принесите vm2 и brm,
Нет необходимости явно добавлять маршрут в подсеть 10.0.0.0/24, он генерируется автоматически, вы можете проверить это с помощью ip route show . Это приводит к
Вы также можете сделать это задом наперед, то есть из vm2 обратно в brm:
Наиболее полезное применение сетевых карт типа veth - это сетевое пространство имен , которое используется в контейнерах Linux (LXC). Вы начинаете один с именем nnsm следующим образом
тогда мы передаем vm2 к нему,
мы наделяем новое пространство имен сети интерфейсом lo (абсолютно необходимым),
мы разрешаем NAT в основной машине,
(если вы подключены к Интернету через eth0 , в противном случае измените соответствующим образом), запустите оболочку в новом пространстве имен сети,
и теперь, если вы начнете вводить новый xterm, вы обнаружите, что находитесь на отдельной виртуальной машине с IP-адресом 10.0.0.2, но вы можете подключиться к Интернету. Преимущество этого состоит в том, что новое сетевое пространство имен имеет свой собственный стек, что означает, например, что вы можете запустить в нем VPN, а остальная часть вашего компьютера не находится в VPN. Это хитрость LXC основаны на.
РЕДАКТИРОВАТЬ:
Я сделал ошибку, в результате чего интерфейс vm2 отключает его и очищает его адрес. Таким образом, вам нужно добавить эти команды изнутри xterm:
и теперь вы можете перемещаться изнутри xterm.
Эти
ip
команды также можно сделать до XTerm систочник
Вот настройка моста из 5 узлов, которую я использую, которая работает. Вы должны быть в состоянии использовать ifconfig для назначения адресов на интерфейсах NodeX
и убирать
источник