Homelab Proxmox VM의 가상 라우터: 메인/홈 네트워크에서 가상 라우터 뒤의 VM으로 요청을 보내는 방법은 무엇입니까?

Homelab Proxmox VM의 가상 라우터: 메인/홈 네트워크에서 가상 라우터 뒤의 VM으로 요청을 보내는 방법은 무엇입니까?

이와 같은 홈 랩 설정이 있습니다(다이어그램도 사용 가능)여기):

회로망

여기서 주목해야 할 점은 내 Proxmox 호스트에는 이더넷 케이블용 NIC가 1개만 있다는 것입니다. WiFi도 있지만 제가 하고 싶은 일이 잘 되지 않아서 사용하지 않기로 결정했습니다. (이것은 이에 관한 수십 개의 기사/포럼을 읽은 후에 제가 이해한 것입니다.)

그래서 WiFi 리피터의 이더넷 케이블을 연결했습니다. 이 Proxmox 호스트는 우리 집의 다른 위치에 있습니다. 그래서 집 라우터에 이더넷을 직접 연결하지 않습니다. 내 노트북에서 무선 SSH( )를 통해 Proxmox 호스트에 연결할 수 있습니다 192.168.1.5. 또한 Proxmox의 웹 UI에 대한 무선 액세스도 가능합니다 https://192.168.1.5:8006.

여기서 하고 싶은 것은 홈 네트워크와 가상 머신 네트워크 간의 네트워크 분할입니다. pfSense, OpenWrt 등과 같은 무료 라우터 소프트웨어가 있다는 것을 알고 있습니다. 하지만 저는 이 기회를 통해 사물이 어떻게 함께 작동하는지 더 잘 이해할 수 있도록 처음부터 다시 구축하고 싶었습니다.

이 Proxmox 호스트에서 일부 가상 머신을 실행할 계획입니다. 여기서 만든 가상 머신 네트워크 내에서 모두 실행되어야 합니다. 일부 가상 머신은 동적 IP/DHCP 모드에서 실행될 수 있고, 일부 가상 머신은 고정 IP 모드에서 실행될 수 있습니다. 그 중 99%는 Linux 가상 머신이 될 것입니다. 현재 VM 네트워크에는 IPv6 지원이 없으며 제대로 작동하고 있습니다. 또한 내 라우터가 VLAN을 지원하지 않기 때문에 VLAN을 사용할 수 없습니다.

그렇게 말하면 따라갈게이 가이드Ubuntu VM에서 가상 라우터를 만듭니다. 제가 해당 가이드와 다르게 한 유일한 작업은 브리지( br0)를 만들고 여기에 고정 IP( 192.168.2.1/24)를 할당하여 VM 네트워크의 라우터/가상 스위치가 될 수 있다는 것입니다.

나는 따르지 않았다인터넷에서 LAN으로 포트 포워딩그리고그럼 그 시험에 대해서...단계가 필요하지 않기 때문입니다. 즉, 나는 다음을 포함한 모든 단계를 따랐습니다.인터넷 트래픽 허용단계.

내가 지금까지 본 것 :

  • [확인] 가상 머신은 서로 ping할 수 있습니다.
  • [확인] 가상 머신이 인터넷에 ping을 보낼 수 있습니다.
  • [비정상] VM 1과 VM 2가 노트북, 라우터 등 홈 네트워크의 장치에 ping을 보낼 수 있음
  • [확인] 노트북이 라우터 가상 머신에 ping을 보낼 수 있습니다.
  • [예외] 노트북은 가상 머신 1 또는 가상 머신 2를 ping할 수 없습니다*

* 내 노트북에 다음을 통해 고정 경로를 추가했습니다.이 가이드. 또한 홈 라우터/게이트웨이에 고정 경로를 추가해 보았습니다.

FWIW, 아래는 내 구성입니다 ...

ip aProxmox 호스트에서:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
    link/ether fc:4d:d4:f3:fe:d3 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 28:c2:dd:a5:46:53 brd ff:ff:ff:ff:ff:ff
4: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fc:4d:d4:f3:fe:d3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::fe4d:d4ff:fef3:fed3/64 scope link
       valid_lft forever preferred_lft forever
5: vmbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 8e:7e:21:7e:f9:e1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8c7e:21ff:fe7e:f9e1/64 scope link
       valid_lft forever preferred_lft forever
11: tap104i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UNKNOWN group default qlen 1000
    link/ether b6:5c:75:be:38:d5 brd ff:ff:ff:ff:ff:ff
12: vmbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3e:6b:04:2c:d9:e0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::3c6b:4ff:fe2c:d9e0/64 scope link
       valid_lft forever preferred_lft forever
13: tap104i1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr2 state UNKNOWN group default qlen 1000
    link/ether 46:d9:8f:dd:ab:77 brd ff:ff:ff:ff:ff:ff
23: tap102i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr2 state UNKNOWN group default qlen 1000
    link/ether 46:9c:a4:fd:81:27 brd ff:ff:ff:ff:ff:ff
24: tap103i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr2 state UNKNOWN group default qlen 1000
    link/ether 12:90:ee:36:27:7a brd ff:ff:ff:ff:ff:ff

/etc/network/interfacesProxmox 호스트의 내용:

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.5/24
    gateway 192.168.1.1
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

iface wlp2s0 inet manual

auto vmbr1
iface vmbr1 inet manual
    bridge-ports none
    bridge-stp off
    bridge-fd 0

auto vmbr2
iface vmbr2 inet manual
    bridge-ports none
    bridge-stp off
    bridge-fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE

노트:

  • vmbr1이전 실험에서는 관련이 없거나 관련이 없습니다. 내 VM 중 어느 것도 vmbr1네트워크를 사용하지 않았습니다.
  • 16진수 post-up복사 post-down:이 가이드- 나의 시행착오 노력의 일부

ip a라우터 VM에서:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 2a:06:12:a9:18:98 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.1.175/24 metric 100 brd 192.168.1.255 scope global dynamic ens18
       valid_lft 4270sec preferred_lft 4270sec
    inet6 fe80::2806:12ff:fea9:1898/64 scope link
       valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether ca:bc:10:17:e0:2f brd ff:ff:ff:ff:ff:ff
    altname enp0s19
    inet6 fe80::c8bc:10ff:fe17:e02f/64 scope link
       valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether da:56:23:09:09:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::d856:23ff:fe09:972/64 scope link
       valid_lft forever preferred_lft forever

/etc/network/interfaces라우터 VM의 콘텐츠:

auto lo
iface lo inet loopback

auto ens18
iface ens18 inet dhcp

#auto ens19
#iface ens19 inet static
#   address 192.168.99.1
#   netmask 255.255.255.0

라우터 가상 머신의 IP 전달 구성:

$ cat /etc/sysctl.conf | grep net.ipv4.ip_forward
net.ipv4.ip_forward=1

/etc/network/if-pre-up.d/iptables라우터 VM의 콘텐츠:

#!/bin/sh
/sbin/iptables-restore < /etc/network/iptables

/etc/network/iptables라우터 VM의 콘텐츠:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# ens18 is WAN interface
# br0 is LAN interface
-A POSTROUTING -o ens18 -j MASQUERADE

COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# Service rules
# basic global accept rules - ICMP, loopback, traceroute, established all accepted
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT

# enable traceroute rejections to get sent out
-A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable

# DNS - accept from LAN
-A INPUT -i br0 -p tcp --dport 53 -j ACCEPT
-A INPUT -i br0 -p udp --dport 53 -j ACCEPT

# DHCP client requests - accept from LAN
-A INPUT -i br0 -p udp --dport 67:68 -j ACCEPT

# SSH - accept from WAN
-A INPUT -i ens18 -p tcp --dport 22 -j ACCEPT

# drop all other inbound traffic
-A INPUT -j DROP

# Forwarding rules
# forward packets along established/related connections
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# forward ICMP
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p icmp -s 0.0.0.0/0 -d 192.168.2.0/24 -j ACCEPT

# forward from LAN (br0) to WAN (ens18)
-A FORWARD -i br0 -o ens18 -j ACCEPT

# drop all other forwarded traffic
-A FORWARD -j DROP

COMMIT

라우터 가상 머신의 명령 결과는 다음과 같습니다 sudo iptables -S.

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i br0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i br0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i br0 -p udp -m udp --dport 67:68 -j ACCEPT
-A INPUT -i ens18 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -d 192.168.2.0/24 -p icmp -j ACCEPT
-A FORWARD -i br0 -o ens18 -j ACCEPT
-A FORWARD -j DROP

라우터 가상 머신의 DHCP 구성 /etc/dhcp/dhcpd.conf:

subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.100 192.168.2.199;
    option routers 192.168.2.1;
    option domain-name-servers 192.168.2.1;
    option broadcast-address 192.168.2.255;
        host ubuntu-desktop {
          hardware ethernet 5A:5B:74:01:69:34;
          fixed-address 192.168.2.2;
        }
}

참고: ubuntu-desktop이는 VM 1입니다.

질문:

  1. VM1 및 VM2가 홈 네트워크의 장치에 액세스하지 못하도록 하려면 어떻게 해야 합니까? TCP/UDP/ICMP 등

  2. 랩톱이나 데스크톱을 사용할 때 ping/ICMP 요청 전송( ping 192.168.2.2/ )과 같이 VM 1 및 VM 2에 액세스하려면 어떻게 해야 합니까 ping 192.168.2.101? 두 VM 모두의 포트 80( / ) curl 192.168.2.2에서 실행되는 Nginx 프로세스에 액세스하고 포트 22( curl 192.168.2.101에서 실행 중인 SSH 서버 프로세스) / ) ?ssh [email protected]ssh [email protected]

이에 대해 조사를 좀 하고 DNAT/SNAT/Masquerade 주제를 다루었지만 그것이 나에게 필요한 것인지 잘 모르겠습니다. 그렇다면 규칙은 어떤 모습이어야 할까요? 저는 이 iptables 주제를 처음 접했습니다. 아래 규칙을 시도했지만 여전히 내 노트북에서 VM 1과 VM 2에 ping을 보낼 수 없습니다.

iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -I FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -d 192.168.2.0/24 -j SNAT --to 192.168.2.1

답변1

브리지 인터페이스를 사용하면 VM1과 VM2가 동일한 브로드캐스트 도메인(192.168.2.0/24)에 속하기 때문에 랩탑과 PC를 ping할 수 있습니다. 브리지 인터페이스를 제거하고 호스트 어댑터/네트워크로만 교체해야 합니다.

가상 머신 격리 네트워크가 192.168.10.0/24라고 가정합니다. 그런 다음 라우터 VM에서 매스커레이딩을 활성화해야 합니다.

$ sudo iptables -A POSTROUTING -o ens18 -j MASQUERADE

노트북/PC가 VM1 또는 VM2를 ping하려면 promox(192.168.1.5)를 통해 물리적 GW/라우터에 고정 경로를 추가해야 합니다.

$ sudo ip route add 192.168.10.0/24 via 192.168.1.5

물리적 라우터/게이트웨이가 정적 라우팅을 지원하지 않는 경우 라우팅 문제가 발생할 수 있습니다. 위의 명령은 Linux에만 적용되지만 요구 사항을 설명하기 위해 사용합니다.

인용하다:https://dannyda.com/2020/06/01/how-to-create-an-internal-only-isolation-network-for-guest-os-virtual-machines-vm-on-proxmox-ve-pve- vmware-workstation-host-only-network-but-other/와 같습니다.

관련 정보