Wireguard를 사용하여 가상 머신에 Minikube 서비스 노출

Wireguard를 사용하여 가상 머신에 Minikube 서비스 노출

작업 중 발생한 버그로 인해BTRFS의 Minikube, 이제 Fedora 35 호스트의 QEMU Fedora 35 게스트 VM에서 실행하고 있습니다. 포트 전달을 사용하여 게스트의 Podman diven 네트워크 서비스에 액세스할 수 있지만 ssh -fNL, 해당 서브넷에 게시된 모든 URL을 게스트에서 직접 사용할 수 있도록 보다 합리적인 방법(예: Wireguard VPN)을 사용하고 싶습니다.

http://localhost:32220예를 들어, 포트 전달 명령을 사용하여 호스트 브라우저 주소를 통해 액세스할 수 있는 서비스가 있는데 ssh -fNL32220:10.88.0.2:32220 192.168.122.122, wireguard를 통해 호스트 브라우저를 podman0 네트워크 주소에 연결하고 싶지만 http://10.88.0.3:32220연결할 수 없습니다.

호스트 설정:

$ ip addr show dev wg0
12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever
$ ip addr show dev virbr0
5: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:92:ca:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

$ sudo cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <host private key string>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = bxL6esqKWNjEcQ7hLeMTE/TYacztAu95f1shVfe7AjQ=
AllowedIPs = 10.88.0.0/16, 10.0.0.2/32
Endpoint = 192.168.122.122:51820

$ sudo cat /etc/sysctl.d/99-sysctl.conf 
net.ipv4.ip_forward=1

게스트 가상 머신 설정:

$ ip addr show dev wg0
11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.2/24 scope global wg0
       valid_lft forever preferred_lft forever
$ ip addr show dev enp1s0 
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:c6:22:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.122/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 2474sec preferred_lft 2474sec
    inet6 fe80::5054:ff:fec6:2284/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
$ ip addr show dev podman0
6: podman0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fa:07:63:90:3f:01 brd ff:ff:ff:ff:ff:ff
    inet 10.88.0.1/16 brd 10.88.255.255 scope global podman0
       valid_lft forever preferred_lft forever
    inet6 fe80::7cc5:35ff:fe52:509d/64 scope link 
       valid_lft forever preferred_lft forever
$ sudo cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.2/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <guest private key string>

[Peer]
PublicKey = Hwb/SeadMH/JbzelPyL7wvOY14Gf8owOcsDFMObD2lE=
AllowedIPs = 10.0.0.1/32

게스트에서는 여기에서 서비스를 볼 수 있습니다(위에서 언급한 대로 SSH 터널을 통해 사용 가능).

minikube service list
|----------------------|---------------------------|--------------|------------------------|
|      NAMESPACE       |           NAME            | TARGET PORT  |          URL           |
|----------------------|---------------------------|--------------|------------------------|
| default              | hello-minikube            |         8080 | http://10.88.0.3:32220 |

마지막으로 Wireguard 서비스 방화벽 포트를 추가했습니다 UDP/51820.virbr0

$ sudo firewall-cmd --info-zone=libvirt
libvirt (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: virbr0
  sources: 
  services: dhcp dhcpv6 dns ssh tftp wireguard
  ports: 
  protocols: icmp ipv6-icmp
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule priority="32767" reject

(a) 이 작업을 수행하는 방법 또는 (b) 테스트 Kubernetes Pod에 게스트 내부 URI를 더 적합하게 만드는 방법에 대한 아이디어가 있습니까? 현재 저는 waypipe원격 브라우저 인스턴스 전달을 사용하고 있습니다. 끔찍한 해킹입니다. :D

관련 정보