2

Как и на диаграмме ниже, физическая сеть - 192.168.99.0/24. veth0 живет в отдельном пространстве имен сети. Я хочу, чтобы он напрямую подключался к физической сети, поэтому node1 и veth0 могут общаться друг с другом через физическую сеть без каких-либо NAT.

Что я пробовал это:

  • создать Linux-мост BR0
  • подключить veth1 к br0
  • подключите eth0 (физический NIC узла 2) к br0

Оказывается, если мы пропингуем с 192.168.99.3 до 192.168.99.1, то пакеты arp приходят от veth0 , проходят через veth1 до br0 , а затем транслируются на node2 eth0 и, наконец, получаются node1 eth0 .

Однако, когда node1 отвечает, пакет, отправленный на veth0 -адрес veth0, не будет получен eth0 узла2 (несоответствие mac, я думаю), таким образом, veth0 не получит пакеты ответа arp, и ping завершится неудачно.

Итак, если я не понимаю этого неправильно, кто-нибудь может дать мне какие-нибудь идеи о том, как сделать эту мостовую сеть?

ОБНОВИТЬ

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

1 ответ1

1

То, что вы пытаетесь сделать, звучит правильно, но есть важное количество мелких деталей (очистка предыдущей конфигурации, запуск всех интерфейсов, создание нового сетевого пространства имен, из которого можно использовать один конец пары veth ), что я не являюсь уверен, что вы все сделали правильно. В частности, я не знаю, поняли ли вы, что вам потребуется dhcp (если вы не используете статический IP-адрес) конец пары veth внутри нового сетевого пространства имен.

Итак, чтобы дать вам полную информацию, я расскажу вам, как я это делаю, используя veth 's: сначала я очищаю текущую конфигурацию,

# systemctl stop network-manager
# ip link set dev usb0 down   
# ip addr flush dev usb0

затем я создаю пару веток , а затем помещаю свой интерфейс Ethernet (здесь он называется usb0) и один конец пары веток в мост br1:

# ip link add veth-a1 type veth peer name veth-b1
# ip link set veth-a1 up
# ip link add br1 type bridge
# ip link set veth-a1 master br1
# ip link set usb0 master br1
# ip link set usb0 up
# ip link set br1 up

Обратите внимание на то, что это очень важно , чтобы принести различные интерфейсы вверх; тогда я запускаю dhclient на мосту:

# dhclient br1
.....
bound to 192.168.11.98 -- renewal in 16650 seconds.

Теперь я перенесу другой конец пары veth в новое сетевое пространство имен, называемое ns1, и создаю xterm внутри нового сетевого пространства имен:

# ip netns add ns1
# ip link set veth-b1 netns ns1
# ip netns exec ns1 xterm &

так что с XTerm я могу принести вверх другой конец пары Veth и начать dhclient на него.

# ip link set dev veth-b1 up
# dhclient veth-b1

Чтобы проверить это, просто пингуйте www.debian.org, и вы проверите как соединение, так и тот факт, что DNS-файлы импортируются из вашего основного сетевого пространства имен автоматически.

Это было бы намного проще с Macvlan, хотя ..,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .