이와 같은 홈 랩 설정이 있습니다(다이어그램도 사용 가능)여기):
여기서 주목해야 할 점은 내 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 a
Proxmox 호스트에서:
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/interfaces
Proxmox 호스트의 내용:
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입니다.
질문:
VM1 및 VM2가 홈 네트워크의 장치에 액세스하지 못하도록 하려면 어떻게 해야 합니까? TCP/UDP/ICMP 등
랩톱이나 데스크톱을 사용할 때 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에만 적용되지만 요구 사항을 설명하기 위해 사용합니다.