Installieren Sie pfSense über KVM in Ubuntu 18.04 mit Netplan

Installieren Sie pfSense über KVM in Ubuntu 18.04 mit Netplan

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:

  1. 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.
  2. Erstellen Sie ein neues virtuelles Netzwerk mit virsh net-define, nicht mit virsh net-create. (Ersteres macht es persistent)
  3. Fügen Sie der XML-Definition der VM die zweite Schnittstelle hinzu und richten Sie diese Schnittstelle auf die WAN-Brücke.

verwandte Informationen