Как настроить виртуальную сеть `veth`

Я хотел бы настроить три виртуальных сетевых интерфейса ( 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. Или я пытаюсь что-то, что невозможно?

Чтобы veth работал, один конец туннеля должен быть соединен с другим интерфейсом. Поскольку вы хотите сохранить все это виртуальным, вы можете соединить конец vm1 туннеля (vm2 – это другой конец туннеля) с виртуальным интерфейсом tap-type в мосту, называемом brm. Теперь вы указываете IP-адреса на brm и vm2 (10.0.0.1 и 10.0.0.2, соответственно), включите переадресацию IPv4 с помощью

 echo 1 > /proc/sys/net/ipv4/ip_forward 

Объединить все интерфейсы и добавить маршрут, инструктирующий ядро, как достичь IP-адресов 10.0.0.0/24. Это все.

Если вы хотите создать больше пар, повторите описанные ниже действия с разными подсетями, например 10.0.1.0/24, 10.0.2.0/24 и т. Д. Поскольку вы включили переадресацию IPv4 и добавили соответствующие маршруты в таблицу маршрутизации ядра, они смогут сразу разговаривать друг с другом.

Также помните, что большинство команд, которые вы используете (brctl, ifconfig, …), устарели: в пакете iproute2 есть команды для выполнения всего этого, см. Ниже мое использование команды ip .

Это правильная последовательность команд для использования интерфейсов типа veth :

Сначала создайте все необходимые интерфейсы,

 ip link add dev vm1 type veth peer name vm2 ip link set dev vm1 up ip tuntap add tapm mode tap ip link set dev tapm up ip link add brm type bridge 

Заметьте, что мы не приводили brm и vm2, потому что нам нужно назначить им IP-адреса, но мы подняли tapm и vm1, что необходимо, чтобы включить их в мост brm. Теперь поработите интерфейсы tapm и vm1 для моста brm,

 ip link set tapm master brm ip link set vm1 master brm 

Теперь дайте адреса мосту и оставшемуся veth интерфейсу vm2,

 ip addr add 10.0.0.1/24 dev brm ip addr add 10.0.0.2/24 dev vm2 

Теперь принесите vm2 и brm,

 ip link set brm up ip link set vm2 up 

Нет необходимости добавлять маршрут в подсеть 10.0.0.0/24 явно, он автоматически генерируется, вы можете проверить с показом IP-маршрута . Это приводит к

 ping -c1 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m --- 10.0.0.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms 

Вы также можете сделать это назад, то есть от vm2 до brm:

 ping -I 10.0.0.2 -c1 10.0.0.1 PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms 

Наиболее полезным приложением сетевых адаптеров veth- типа является пространство имен в сети , которое используется в контейнерах Linux (LXC). Вы начинаете одно имя nnsm следующим образом

 ip netns add nnsm 

То мы передадим ему vm2,

 ip link set vm2 netns nnsm 

Мы наделим новое пространство имен в сети интерфейсом lo (абсолютно необходимо),

 ip netns exec nnsm ip link set dev lo up 

Мы разрешаем NATting на главной машине,

 iptables -t nat -A POSTROUTING -o brm -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

(Если вы подключены к Интернету через eth0 , в противном случае измените соответствующим образом), запустите оболочку в новом пространстве имен в сети,

 ip netns exec nnsm xterm & 

И теперь, если вы начнете вводить новый xterm, вы обнаружите, что находитесь в отдельной виртуальной машине с IP-адресом 10.0.0.2, но вы можете связаться с Интернетом. Преимущество этого заключается в том, что новое сетевое пространство имен имеет свой собственный стек, что означает, например, что вы можете запустить VPN в нем, пока остальная часть вашего ПК не находится в VPN. Это основанные на методе LXC.

РЕДАКТИРОВАТЬ:

Я допустил ошибку, в результате чего интерфейс vm2 сбрасывает и очищает свой адрес. Таким образом, вам нужно добавить эти команды из xterm:

 ip addr add 10.0.0.2/24 dev vm2 ip link set dev vm2 up ip route add default via 10.0.0.1 echo "nameserver 8.8.8.8" >> /etc/resolv.conf echo "nameserver 8.8.4.4" >> /etc/resolv.conf 

И теперь вы можете перемещаться из xterm.

Команды ip также могут быть выполнены до xterm с

 ip -netns nnsm addr add 10.0.0.2/24 dev vm2 ip -netns nnsm link set dev vm2 up ip -netns nnsm route add default via 10.0.0.1 
  • Получить длину MP3 в Linux / FreeBSD
  • Btrfs: ОГРОМНЫЕ метаданные выделены
  • Полноэкранный браузер
  • Как запрограммировать командную строку Linux для запуска фрагмента кода несколько раз?
  • Запретить пользователю вводить случайное пространство между rm и wildcard
  • Полный список команд Commandline
  • Возможно, умирающий жесткий диск, но читает, пишет работу - не уверен в записи журнала
  • Есть ли команда в Linux знать номер процессора, в котором загружается процесс?
  • Mysql (mariadb) ERROR 1698 (28000): доступ запрещен для пользователя 'root' @ 'localhost'
  • Маршрут по умолчанию в debian с двумя интерфейсами
  • Какое значение rdisk в boot.ini сопоставляет с каким диском?
  • Давайте будем гением компьютера.