VRF в Linux с использованием сетевых пространств имен

Моя конечная цель - внедрить виртуальную маршрутизацию и пересылку (VRF) в Linux. Наиболее распространенным методом, по-видимому, является настройка различных пространств сетевых имен (по одному для каждой отдельной таблицы маршрутизации) и запуск демона Quagga или BIRD для каждой таблицы пространств имен / маршрутизации. Я не женат на этом методе, поэтому, если у кого-то есть другие предложения, пожалуйста, дайте мне знать.

На рассматриваемой машине установлен Debian 7 (wheezy) на рабочей станции VMware 12. Он всегда был маршрутизатором и некоторое время успешно маршрутизировал, прежде чем я начал эту реконфигурацию, поэтому я знаю, что общие настройки маршрутизации хороши.

Непосредственная проблема заключается в том, что я не могу общаться через свое сетевое пространство имен. То есть veth1 (который находится в моем пространстве имен, как показано ниже) может пропинговать ТОЛЬКО veth0 и ничего больше. Нет никакой сетевой связи между veth1 и сетями под ним - даже ARP. Если бы я не знал лучше, я бы сказал, что кто-то выдернул кабель из коммутатора (но это довольно сложно сделать в виртуальной среде). И да, я проверил, правильно ли настроены виртуальные сети. Маршрутизатор работает при восстановлении его старой конфигурации. Это просто не работает в этой новой конфигурации.

У кого-нибудь есть идеи, как заставить veth1 общаться? Или даже совершенно другой способ заставить VRF работать на Linux? Заранее спасибо.

Я настроил новую конфигурацию следующим образом:

добавить пространство имен

ip netns add nsx

добавить виртуальные интерфейсы

ip link add veth0 type veth peer name veth1

создать мост

ip link add name vbr0 type bridge

добавить eth1 и veth1 к мосту

ip link set dev eth1 master vbr0
ip link set dev veth1 master vbr0

Назначьте veth1 в пространство имен

ip link set veth1 netns nsx

настроить IP-адреса ветерана

ip addr add 10.0.2.10/24 dev vbr0
ip addr add 10.0.2.1/24 dev veth0
ip netns exec nsx ip addr add 10.0.2.2/24 dev veth1

Подними I / F вверх

ip link set dev vbr0 up
ip link set dev veth0 up
ip netns exec nsx ip link set dev veth1 up

назначить veth2 свою собственную таблицу маршрутизации

ip netns exec nsx ip rule add dev veth1 table 1

Установите маршрут по умолчанию для виртуальной таблицы

ip netns exec nsx ip route add default via 10.0.2.1 dev veth1

В выходных данных iptables-save вы можете видеть, что все установлено на ACCEPT или FORWARD, в зависимости от ситуации.

вывод ip addr show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:10:e0:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.26.5/24 brd 192.168.26.255 scope global eth0
    inet 192.168.26.0/24 brd 192.168.26.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe10:e001/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vbr0 state UP qlen 1000
    link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
    inet6 fe80::20c:29ff:fe10:e0ed/64 scope link
       valid_lft forever preferred_lft forever
47: veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether ce:63:69:82:73:35 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.1/24 scope global veth0
    inet6 fe80::cc63:69ff:fe82:7335/64 scope link tentative
       valid_lft forever preferred_lft forever
48: vbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 scope global vbr0
    inet6 fe80::20c:29ff:fe10:e0ed/64 scope link tentative
       valid_lft forever preferred_lft forever

вывод ip route show:

 default via 192.168.26.2 dev eth0
    10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.1
    10.0.2.0/24 dev vbr0  proto kernel  scope link  src 10.0.2.10
    10.0.2.0/24 dev veth0  proto kernel  scope link  src 10.0.2.1
    192.168.26.0/24 dev eth0  proto kernel  scope link  src 192.168.26.5

вывод ip netns exec nsx ip addr show:

    45: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    46: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether b6:27:40:06:c2:de brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.2/24 scope global veth1
        inet6 fe80::b427:40ff:fe06:c2de/64 scope link tentative
           valid_lft forever preferred_lft forever

вывод ip netns exec nsx ip route show

 default via 10.0.2.1 dev veth1
    10.0.2.0/24 dev veth1  proto kernel  scope link  src 10.0.2.2

вывод iptables-save

# Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016
*nat
:PREROUTING ACCEPT [36:3588]
:INPUT ACCEPT [32:2540]
:OUTPUT ACCEPT [51:3744]
:POSTROUTING ACCEPT [55:4792]
COMMIT
# Completed on Thu Apr 14 18:19:19 2016
# Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016
*filter
:INPUT ACCEPT [3319:373389]
:FORWARD ACCEPT [8:2004]
:OUTPUT ACCEPT [3558:428447]
COMMIT
# Completed on Thu Apr 14 18:19:19 2016

1 ответ

Решение

Начиная с версии ядра 4.3 Linux имеет реализацию VRF. Оформить заказ: https://www.kernel.org/doc/Documentation/networking/vrf.txt.

Другие вопросы по тегам