lxdbr0 и маршрутизация на основе источника хост-машины

lxdbr0 и маршрутизация на основе источника хост-машины

У меня довольно обычная настройка LXD (версия 3.0.3) с интерфейсом моста по умолчанию lxdbr0 на Ubuntu 18.04.2.

С другой стороны, моя сеть хост-машин не самая обычная. У меня есть два моста (br0 и br1), подключенных через две связи к четырем интерфейсам (2 интерфейса на связь, 1 связь на мост).

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

Теперь проблема в том, что я могу пинговать все и везде (хост делает IP-маскарад), кроме хостов, которые находятся в той же подсети, что и br0 и br1, и поскольку мой прямой прокси-сервер находится в той же подсети, что и br1, у меня проблема. Маршрут хоста по умолчанию также находится на br1.

Правила и маршруты для хост-машины следующие:

user@host:~$ ip route show
default via 10.10.50.254 dev br1 proto static
10.146.233.0/24 dev lxdbr0 proto kernel scope link src 10.146.233.1
10.10.99.0/24 dev br0 proto kernel scope link src 10.10.99.1
10.10.50.0/24 dev br1 proto kernel scope link src 10.10.50.1

user@host:~$ ip route show table 99
default via 10.10.99.254 dev br0 proto static

user@host:~$ ip rule show table 99
0:      from 10.10.99.0/24 lookup 99

user@host:~$ ip route show table 50
default via 10.10.50.254 dev br1 proto static

user@host:~$ ip rule show table 50
0:      from 10.10.50.0/24 lookup 50

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

...
bridges:
    br0:
      addresses: [10.10.99.1/24]
      interfaces: [bond1]
      routes:
      - to: 0.0.0.0/0
        via: 10.10.99.254
        table: 99
      routing-policy:
      - from: 10.10.99.0/24
        table: 99
      parameters:
        stp: true
        forward-delay: 0
    br1:
      addresses: [10.10.50.1/24]
      gateway4: 10.10.50.254
      interfaces: [bond0]
      routes:
      - to: 0.0.0.0/0
        via: 10.10.50.254
        table: 50
      routing-policy:
      - from: 10.10.50.0/24
        table: 50
      parameters:
        stp: true
        forward-delay: 0

Единственные правила IPTABLES генерируются LXD

user@host:~$ sudo iptables -L -nv
Chain INPUT (policy ACCEPT 828 packets, 62176 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  lxdbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53 /* generated for LXD network lxdbr0 */
   16  1064 ACCEPT     udp  --  lxdbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 /* generated for LXD network lxdbr0 */
    2   658 ACCEPT     udp  --  lxdbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67 /* generated for LXD network lxdbr0 */

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    7   588 ACCEPT     all  --  *      lxdbr0  0.0.0.0/0            0.0.0.0/0            /* generated for LXD network lxdbr0 */
    7   588 ACCEPT     all  --  lxdbr0 *       0.0.0.0/0            0.0.0.0/0            /* generated for LXD network lxdbr0 */

Chain OUTPUT (policy ACCEPT 540 packets, 69728 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      lxdbr0  0.0.0.0/0            0.0.0.0/0            tcp spt:53 /* generated for LXD network lxdbr0 */
   16  1020 ACCEPT     udp  --  *      lxdbr0  0.0.0.0/0            0.0.0.0/0            udp spt:53 /* generated for LXD network lxdbr0 */
    2   680 ACCEPT     udp  --  *      lxdbr0  0.0.0.0/0            0.0.0.0/0            udp spt:67 /* generated for LXD network lxdbr0 */

Правила NAT

user@host:~$ sudo iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 1649 packets, 66895 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 9 packets, 899 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 10 packets, 927 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 10 packets, 927 bytes)
 pkts bytes target     prot opt in     out     source               destination
    3   252 MASQUERADE  all  --  *      *       10.146.233.0/24     !10.146.233.0/24      /* generated for LXD network lxdbr0 */

Если я пингую не br0 или br1 адреса подсети, я вижу запросы и ответы на интерфейсах br1, lxdbr0 и veth. Если я пингую br0 или br1 адреса, я вижу только запросы на интерфейсах lxdbr0 и veth. Никакого трафика на br1 и ответов на любом из вышеупомянутых интерфейсов.

и, наконец, моя конфигурация интерфейсов с пропущенными интерфейсами eth, lo и bond:

user@host:~$ ip a
7: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ee:f1:6a:84:6f:df brd ff:ff:ff:ff:ff:ff
    inet 10.10.50.1/24 brd 10.10.50.255 scope global br1
       valid_lft forever preferred_lft forever
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ce:13:19:08:56:ad brd ff:ff:ff:ff:ff:ff
    inet 10.10.99.1/24 brd 10.10.99.255 scope global br0
       valid_lft forever preferred_lft forever
22: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:cb:12:0f:9f:d7 brd ff:ff:ff:ff:ff:ff
    inet 10.146.233.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::70f5:3eff:feac:2ae6/64 scope link
       valid_lft forever preferred_lft forever
26: vethANRBKX@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether fe:cb:12:0f:9f:d7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::fccb:12ff:fe0f:9fd7/64 scope link
       valid_lft forever preferred_lft forever

Желаемым результатом было бы ограничение NAT на 10.10.50.254 и 10.10.99.254 и доступ к интернету из контейнеров через мой прокси в подсети br1. Вероятно, мне нужно что-то сделать с моими правилами маршрутизации/политики или iptables или настроить lxdbr0 по-другому, но, похоже, на данный момент я застрял.

решение1

Вам следует добавить напрямую подключенные маршруты в ваши дополнительные таблицы маршрутизации. В текущей конфигурации, когда вы пингуете адреса интерфейсов моста, ответы направляются через шлюзы ( 10.10.50.254и 10.10.99.254) наружу.

Проверить маршрутизацию можно с помощью команд:

  • ip route get 10.146.233.2 from 10.10.50.1
  • ip route get 10.146.233.2 from 10.10.99.1

Вы увидите реальные маршруты и, возможно, немного запутаетесь.

Итак, ваши таблицы маршрутизации должны выглядеть следующим образом:

user@host:~$ ip route show table 50
default via 10.10.50.254 dev br1 proto static
10.146.233.0/24 dev lxdbr0 proto static scope link src 10.146.233.1
10.10.99.0/24 dev br0 proto static scope link src 10.10.99.1
10.10.50.0/24 dev br1 proto static scope link src 10.10.50.1

user@host:~$ ip route show table 99
default via 10.10.99.254 dev br0 proto static
10.146.233.0/24 dev lxdbr0 proto static scope link src 10.146.233.1
10.10.99.0/24 dev br0 proto static scope link src 10.10.99.1
10.10.50.0/24 dev br1 proto static scope link src 10.10.50.1

Связанный контент