Для работы ветки один конец туннеля должен быть соединен с другим интерфейсом. Поскольку вы хотите сохранить все это виртуальным, вы можете соединить конец туннеля vm1 (другой конец туннеля vm2) с виртуальным интерфейсом типа ответвления в мосте, называемом 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
теперь дайте адреса мосту и оставшемуся ветхому интерфейсу 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 route show. Это приводит к
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
мы разрешаем NAT в основной машине,
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