
У меня довольно обычная настройка 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