netplan을 사용하여 Ubuntu 18.04에서 KVM을 통해 pfSense 설치

netplan을 사용하여 Ubuntu 18.04에서 KVM을 통해 pfSense 설치

홈 네트워크에 가상화된 방화벽을 설정하려고 합니다. 아키텍처는 다음과 같습니다: 인터넷 -> 가상화된 pfSense -> lan. 이전 네트워크 구성기를 사용하여 이를 수행하는 방법에 대한 예는 많이 있지만 Ubuntu 18.04의 네트워크 관리자인 netplan을 사용하는 예는 없습니다.

호스트에 두 개의 NIC 카드가 있고 새로 설치된 ubuntu 18.04 서버 에디션이 설치되어 있습니다.

/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]

LAN 브리지에 고정 IP를 할당해야 한다고 생각하며 가상화된 pfSense가 ISP로부터 DHCP 주소를 요청하도록 하여 일회용 IP를 WAN 브리지에 할당했지만 의도적으로 할당하지 않았습니다. WAN 브리지에 대한 게이트웨이 또는 네임서버. (이것이 잘못된 경우 이 넷플랜 구성을 수정해 주시면 감사하겠습니다)

두 번째 가상 브리지를 만들어야 한다고 생각해서 그렇게 했습니다. 기본값(LAN이라고도 함)과 제가 만든 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>

둘 다 virsh net-list에 제대로 표시됩니다.

username@scarif:~$ sudo virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes
 wan_bridge           active     yes           yes

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

이 모든 작업을 수행한 후 ifconfig를 실행하면 다음과 같은 결과가 나타납니다.

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

하지만 이 명령 문자열을 사용하여 pfSense를 설치해야 하면:

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

설치는 잘 진행되지만 pfsense에는 기본 네트워크에서 제공하는 LAN 인터페이스/브리지인 인터페이스 하나만 표시됩니다.

답변1

모든 질문을 입력한 후 VM이 다른 인터페이스를 '볼' 수 있도록 구성되지 않았다는 것이 문제라는 것을 깨달았습니다. 그래서 문제를 해결하기 위해 다음을 수행했습니다.

sudo virsh dumpxml pfsense > 20181201-pfsense.txt

물론 내 VM의 전체 XML 정의를 제공합니다. 그런 다음 기존 인터페이스 항목을 복사했습니다.

<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>

다음 명령을 실행하여 이를 복사하여 새 인터페이스를 만들었습니다. sudo virsh edit pfsense

다음 줄을 추가합니다. (mac 주소를 1비트 변경하고 가상 nic를 슬롯 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>

그런 다음 내가 해야 할 일은 pfsense VM을 시작하고 인터페이스를 WAN 및 LAN에 할당하는 것뿐이었습니다. WAN은 ISP로부터 DHCP를 확보하고 LAN 인터페이스에 고정 IP를 설정했습니다.

결국 하이퍼바이저/호스트의 세 가지 주요 단계는 다음과 같습니다.

  1. netplan에서 각 NIC 카드에 하나씩 두 개의 브리지를 설정하고 물리적 NIC 카드가 아닌 브리지에 IP 주소를 할당합니다.
  2. virsh net-create가 아닌 virsh net-define을 사용하여 새 가상 네트워크를 만듭니다. (전자는 그것을 지속적으로 만든다)
  3. VM의 XML 정의에 두 번째 인터페이스를 추가하고 이 인터페이스가 WAN 브리지를 가리키도록 합니다.

관련 정보