KVM 포트 포워딩(Ubunto 20.04)

KVM 포트 포워딩(Ubunto 20.04)

내 컴퓨터가 새로 설치되었습니다 Ubuntu 20.04.3 LTS.

kvm을 설치했습니다.

sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm

virt-manager를 사용하여 "ubuntu20.04"라는 새 가상 머신을 만들었습니다.

 Id   Name          State
-----------------------------
 7    ubuntu20.04   running

잘 작동합니다. 기본 네트워크 설정이 있습니다:

 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

다음 명령을 사용하여 가상 머신의 고정 IP 주소를 설정하도록 네트워크 파일을 편집했습니다.

> virsh net-edit default

<network>
  <name>default</name>
  <uuid>57bd2ef8-5ef9-405e-b631-efdd10a12ca8</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:7c:ae:96'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
      <host mac='52:54:00:21:02:54' name='ubuntu20.04' ip='192.168.122.101'/>
    </dhcp>
  </ip>
</network>

아무 문제 없이 가상 머신에 SSH로 접속할 수 있습니다.ssh 192.168.122.101

내 호스트에는 공개 IP 192.168.1.85가 있습니다.

ifconfig
enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.85  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::9e0a:64e6:7542:cdc4  prefixlen 64  scopeid 0x20<link>
        ether 0c:4d:e9:d4:35:20  txqueuelen 1000  (Ethernet)
        RX packets 306030  bytes 451106893 (451.1 MB)
        RX errors 0  dropped 3303  overruns 0  frame 0
        TX packets 19624  bytes 2100797 (2.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 19  

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 1792  bytes 176567 (176.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1792  bytes 176567 (176.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:7c:ae:96  txqueuelen 1000  (Ethernet)
        RX packets 13458  bytes 837489 (837.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68353  bytes 428375346 (428.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe21:254  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:21:02:54  txqueuelen 1000  (Ethernet)
        RX packets 152  bytes 15868 (15.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 718  bytes 44209 (44.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

표적:이제 내 목표는 로컬 네트워크의 다른 머신에서 가상 머신의 SSH에 액세스하는 것입니다. 호스트 포트 2222(192.168.1.85:2222)로 들어오는 모든 트래픽을 가상 머신(192.168.122.101:22)으로 리디렉션하여 이를 달성하고 싶습니다.

나는 (Ubuntu 설치 후 기본값) 다음을 가지고 있습니다 :

net.ipv4.ip_forward = 1

여러 웹사이트의 지침을 따르려고 했지만 성공하지 못했습니다. 예를 들어, 나는 팔로우했습니다이 튜토리얼, 우분투에서 기본적으로 활성화되어 있는 UFW 사용을 기반으로 하기 때문입니다. 기본적으로 이 방법은 다음을 기반으로 합니다.

  1. 후크 파일(qemu)을 추가합니다.

/etc/libvirt/hooks/qemu

다음 콘텐츠가 포함되어 있습니다:

v=$(/sbin/iptables -L FORWARD -n -v | /usr/bin/grep 192.168.122.0/24 | /usr/bin/wc -l)
# avoid duplicate as this hook get called for each VM
#[ $v -le 2 ] && 

if [ $v -le 2]
then
        /sbin/iptables -I FORWARD 1 -o virbr0 -m state -s 192.168.1.0/24 -d 192.168.122.0/24 --state N>
fi
  1. 파일을 편집하고

/etc/ufw/before.rules

(상단에) 다음을 추가합니다.

:PREROUTING ACCEPT [0:0]
-A PREROUTING -d 192.168.1.85 -p tcp --dport 2222 -j DNAT --to-destination 192.168.122.101:22 -m comment --comment "VM2/OpenBSD SSH port forwarding"
COMMIT

마지막으로 이 지침에 따라 다음과 같은 iptables를 얻었습니다.

sudo iptables-save -t nat
# Generated by iptables-save v1.8.4 on Sat Jan 29 16:20:08 2022
*nat
:PREROUTING ACCEPT [268:56889]
:INPUT ACCEPT [129:22767]
:OUTPUT ACCEPT [1213:187394]
:POSTROUTING ACCEPT [1213:187394]
:LIBVIRT_PRT - [0:0]
-A PREROUTING -d 192.168.1.85/32 -p tcp -m tcp --dport 2222 -m comment --comment "VM2/OpenBSD SSH port forwarding" -j DNAT --to-destination 192.168.122.101:22
-A PREROUTING -d 192.168.1.85/32 -p tcp -m tcp --dport 2222 -m comment --comment "VM2/OpenBSD SSH port forwarding" -j DNAT --to-destination 192.168.122.101:22
-A PREROUTING -d 192.168.1.85/32 -p tcp -m tcp --dport 2222 -m comment --comment "VM2/OpenBSD SSH port forwarding" -j DNAT --to-destination 192.168.122.101:22
-A PREROUTING -d 192.168.1.85/32 -p tcp -m tcp --dport 2222 -m comment --comment "VM2/OpenBSD SSH port forwarding" -j DNAT --to-destination 192.168.122.101:22
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT

이것은 튜토리얼에서 얻은 것과 호환되는 것 같습니다. 그런데 전달된 포트를 사용하여 VM-shh에 로그인하려고 하면 다음과 같은 오류가 발생합니다.

ssh 192.168.1.85 -p 2222
ssh: connect to host 192.168.1.85 port 2222: Connection refused

도움을 주셔서 미리 감사드립니다!

관련 정보