Ich versuche, eine virtualisierte Firewall für mein Heimnetzwerk einzurichten. Die Architektur sieht folgendermaßen aus: Internet -> virtualisiertes pfSense -> LAN. Es gibt zahlreiche Beispiele, wie dies mit dem alten Netzwerkkonfigurator funktioniert, aber keine Beispiele für die Verwendung von Netplan, dem Netzwerkmanager von Ubuntu 18.04.
Ich habe zwei NIC-Karten auf dem Host und die frisch installierte Ubuntu 18.04 Server Edition.
Hier ist der Inhalt der Datei /etc/netplan/50-cloud-init.yaml
username@scarif:~$ cat /etc/netplan/50-cloud-init.yaml
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: no
dhcp6: no
enp5s0:
dhcp4: no
dhcp6: no
bridges:
br_wan:
interfaces: [enp5s0]
dhcp4: no
dhcp6: no
addresses: [10.0.0.1/24]
br_lan:
interfaces: [eno1]
dhcp4: no
dhcp6: no
addresses: [192.168.1.29/24]
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.1,8.8.8.8]
Beachten Sie, dass ich glaube, dass ich der LAN-Brücke eine statische IP zuweisen muss und möchte, dass das virtualisierte pfSense eine DHCP-Adresse vom ISP anfordert. Daher habe ich der WAN-Brücke eine Wegwerf-IP zugewiesen und der WAN-Brücke absichtlich kein Gateway oder Nameserver zugewiesen. (Wenn diese Netplan-Konfiguration falsch ist, lasse ich mich gern korrigieren.)
Ich dachte, ich müsste eine zweite virtuelle Brücke erstellen, also habe ich das auch getan. Ich zeige sowohl die Standardbrücke (auch bekannt als LAN) als auch die, die ich erstellt habe und die ich wan_bridge genannt habe.
username@scarif:~$ sudo virsh net-dumpxml default
<network>
<name>default</name>
<uuid>5e5d35c8-c46a-43ed-9fc4-13dcb3853b34</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:dc:57:8f'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
username@scarif:~$ sudo virsh net-dumpxml wan_bridge
<network>
<name>wan_bridge</name>
<uuid>37a0163b-ae70-445d-a25f-c62cbe7d5b51</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:dc:57:8d'/>
<ip address='192.168.133.1' netmask='255.255.255.0'>
</ip>
</network>
Beide werden in der Virsh-Netzliste einwandfrei angezeigt
username@scarif:~$ sudo virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
wan_bridge active yes yes
Ich sehe auch beides in brctl
username@scarif:~$ sudo brctl show
bridge name bridge id STP enabled interfaces
br_lan 8000.aefa52b9a49b no eno1
br_wan 8000.22c9e0f24ba3 no enp5s0
virbr0 8000.525400dc578f yes virbr0-nic
virbr1 8000.525400dc578d yes virbr1-nic
Das Ausführen von ifconfig nach all dem führt zu:
username@scarif:~$ ifconfig
br_lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.29 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::acfa:52ff:feb9:a49b prefixlen 64 scopeid 0x20<link>
ether ae:fa:52:b9:a4:9b txqueuelen 1000 (Ethernet)
RX packets 20623 bytes 3453527 (3.4 MB)
RX errors 0 dropped 36 overruns 0 frame 0
TX packets 4756 bytes 5192472 (5.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
br_wan: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c9:e0ff:fef2:4ba3 prefixlen 64 scopeid 0x20<link>
ether 22:c9:e0:f2:4b:a3 txqueuelen 1000 (Ethernet)
RX packets 13 bytes 650 (650.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26 bytes 1996 (1.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 98:90:96:be:eb:02 txqueuelen 1000 (Ethernet)
RX packets 22673 bytes 4163339 (4.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9632 bytes 5540146 (5.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf7d00000-f7d20000
enp5s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 68:1c:a2:12:f8:e9 txqueuelen 1000 (Ethernet)
RX packets 849 bytes 128644 (128.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26 bytes 1996 (1.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 347 bytes 26756 (26.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 347 bytes 26756 (26.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:dc:57:8f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.133.1 netmask 255.255.255.0 broadcast 192.168.133.255
ether 52:54:00:dc:57:8d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Aber als ich pfSense mit dieser Befehlszeichenfolge installieren wollte:
sudo virt-install \
--name pfsense \
--memory 2048
--graphics vnc,listen=0.0.0.0 \
--disk /var/lib/libvirt/images/pfsense.qcow2,size=8,format=qcow2 \
--autostart \
--os-type linux\
--cdrom /home/dooguls/pfSense-CE-2.4.4-RELEASE-amd64.iso \
--debug
Die Installation verläuft reibungslos, aber pfSense erkennt nur eine Schnittstelle, nämlich die vom Standardnetzwerk bereitgestellte, nämlich meine LAN-Schnittstelle/-Brücke.
Antwort1
Nachdem ich die ganze Frage eingetippt hatte, wurde mir klar, dass das Problem darin bestand, dass die VM nicht so konfiguriert war, dass sie eine andere Schnittstelle „sehen“ konnte. Um das Problem zu beheben, ging ich also wie folgt vor:
sudo virsh dumpxml pfsense > 20181201-pfsense.txt
was natürlich die vollständige XML-Definition meiner VM liefert. Dann habe ich den vorhandenen Schnittstelleneintrag kopiert:
<interface type='bridge'>
<mac address='52:54:00:3a:37:7d'/>
<source bridge='br_lan'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
und kopierte es, um eine neue Schnittstelle zu erstellen, indem Sie diesen Befehl ausführten: sudo virsh edit pfsense
und füge diese Zeilen hinzu: (beachten Sie, dass ich die Mac-Adresse um ein Bit geändert und die virtuelle Netzwerkkarte dem Steckplatz 0x06 zugewiesen habe)
<interface type='bridge'>
<mac address='52:54:00:3a:37:7e'/>
<source bridge='br_wan'/>
<target dev='vnet1'/>
<model type='rtl8139'/>
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
Dann musste ich nur noch die pfsense-VM starten und meine Schnittstellen WAN und LAN zuweisen. WAN holte sich einen DHCP vom ISP und ich legte eine statische IP auf der LAN-Schnittstelle fest.
Letztendlich waren meiner Meinung nach die drei wichtigsten Schritte auf dem Hypervisor/Host:
- Richten Sie in Netplan zwei Bridges ein, eine für jede NIC-Karte, und weisen Sie die IP-Adressen den Bridges zu, nicht den physischen NIC-Karten.
- Erstellen Sie ein neues virtuelles Netzwerk mit virsh net-define, nicht mit virsh net-create. (Ersteres macht es persistent)
- Fügen Sie der XML-Definition der VM die zweite Schnittstelle hinzu und richten Sie diese Schnittstelle auf die WAN-Brücke.