Estoy intentando configurar un firewall virtualizado para mi red doméstica. La arquitectura se ve así: Internet -> pfSense virtualizado -> lan. Hay muchos ejemplos de cómo hacer esto usando el antiguo configurador de red, pero no hay ejemplos para usar netplan, el administrador de red de Ubuntu 18.04.
Tengo dos tarjetas NIC en el host y una edición de servidor ubuntu 18.04 recién instalada.
Aquí está el contenido del archivo /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]
Tenga en cuenta que creo que necesito tener una IP estática asignada al puente LAN y quiero que el pfSense virtualizado solicite una dirección DHCP del ISP, por lo que asigné una IP desechable al puente WAN y no la asigné deliberadamente. una puerta de enlace o un servidor de nombres al puente WAN. (Feliz de ser corregido en esta configuración de netplan si esto es incorrecto)
Pensé que necesitaba crear un segundo puente virtual, así que también lo hice. Estoy mostrando tanto el valor predeterminado (también conocido como LAN) como el que creé y al que llamé wan_bridge
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>
Ambos aparecen muy bien en virsh net-list
username@scarif:~$ sudo virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
wan_bridge active yes yes
También veo ambos en 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
Ejecutar ifconfig después de todo esto da como resultado:
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
Pero cuando pude instalar pfSense con esta cadena de comando:
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
La instalación va bien, pero pfsense solo ve una interfaz, la proporcionada por la red predeterminada, que es mi interfaz/puente LAN.
Respuesta1
Después de escribir todas las preguntas, me di cuenta de que el problema era que la VM no estaba configurada para "ver" otra interfaz. Entonces, para solucionar el problema, hice lo siguiente:
sudo virsh dumpxml pfsense > 20181201-pfsense.txt
que, por supuesto, proporciona la definición xml completa de mi VM. Luego copié la entrada de la interfaz existente:
<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>
y lo copié para crear una nueva interfaz ejecutando este comando: sudo virsh edit pfsense
y agregando estas líneas: (tenga en cuenta que cambié la dirección mac en un bit y asigné la nic virtual a la ranura 0x06)
<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>
Luego, todo lo que tuve que hacer fue iniciar pfsense VM y asignar mis interfaces a WAN y LAN. WAN tomó un DHCP del ISP y configuré una IP estática en la interfaz LAN.
Entonces, al final creo que los tres pasos clave en el hipervisor/host fueron:
- Configure dos puentes en netplan, uno para cada tarjeta NIC y asigne las direcciones IP a los puentes, no a las tarjetas NIC físicas.
- Cree una nueva red virtual usando virsh net-define, no virsh net-create. (el primero lo hace persistente)
- Agregue la segunda interfaz a la definición XML de la VM y apunte esta interfaz al puente WAN.