
Ich habe ein ziemlich normales LXD-Setup (Version 3.0.3) mit der Standard-Bridge-Schnittstelle lxdbr0 auf Ubuntu 18.04.2.
Andererseits ist das Netzwerk meiner Host-Rechner nicht das regulärste. Ich habe zwei Bridges (br0 und br1), die über zwei Bonds mit vier Schnittstellen verbunden sind (2 Schnittstellen pro Bond, 1 Bond pro Bridge).
Da ich Schwierigkeiten hatte, das reguläre Routing richtig zum Laufen zu bringen, verwende ich separate Routingtabellen pro Brücke. Ich musste dafür sorgen, dass die Anfragen und Antworten denselben Ausgangs- wie Eingangspfad verwenden.
Jetzt besteht das Problem darin, dass ich alles und überall anpingen kann (Host führt IP-Maskierung durch), außer Hosts, die sich im selben Subnetz wie br0 und br1 befinden, und da mein Forward-Proxy im selben Subnetz wie br1 ist, habe ich ein Problem. Die Standardroute des Hosts befindet sich ebenfalls auf br1.
Die Regeln und Routen für den Hostcomputer sind:
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
Die entsprechende Netplan-Konfiguration lautet wie folgt:
...
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
Die einzigen IPTABLES-Regeln werden von LXD generiert
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-Regeln sind
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 */
Wenn ich Subnetzadressen anpinge, die nicht br0 oder br1 sind, kann ich Anfragen und Antworten auf den Schnittstellen br1, lxdbr0 und veth sehen. Wenn ich Adressen br0 oder br1 anpinge, sehe ich nur Anfragen auf den Schnittstellen lxdbr0 und veth. Kein Verkehr auf br1 und keine Antworten auf den zuvor erwähnten Schnittstellen.
und schließlich meine Schnittstellenkonfiguration mit ausgelassenen eth-, lo- und bond-Schnittstellen:
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
Mein gewünschtes Ergebnis wäre, NAT auf 10.10.50.254 und 10.10.99.254 einzuschränken und von den Containern aus über meinen Proxy im Unternetzwerk br1 auf das Internet zuzugreifen. Ich muss wahrscheinlich etwas an meinen Routing-/Richtlinienregeln oder iptables ändern oder lxdbr0 anders konfigurieren, aber im Moment stecke ich anscheinend fest.
Antwort1
Sie sollten die direkt verbundenen Routen zu Ihren zusätzlichen Routingtabellen hinzufügen. Wenn Sie in der aktuellen Konfiguration die Adressen der Bridge-Schnittstellen anpingen, werden die Antworten über Gateways ( 10.10.50.254
und 10.10.99.254
) nach außen geleitet.
Sie können das Routing mit den folgenden Befehlen überprüfen:
ip route get 10.146.233.2 from 10.10.50.1
ip route get 10.146.233.2 from 10.10.99.1
Sie sehen die tatsächlichen Routen und sind möglicherweise etwas verwirrt.
Ihre Routing-Tabellen sollten also folgendermaßen aussehen:
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