호스트 VPN을 통해 QEMU VM 트래픽 라우팅

호스트 VPN을 통해 QEMU VM 트래픽 라우팅

tl;dr 호스트는 VPN을 통해 인터넷에 연결하고 이 호스트의 VM은 이 VPN을 통과하지 않습니다(그러나 그래야 합니다). 네트워크 구성이 올바르지 않은 것 같습니다.

주인

호스트(arch Linux)는 openvpn과 구성 파일을 사용하여 VPN 네트워크에 연결하므로 tun0openvpn에서 생성된 TUN 장치( )가 있습니다. 물리적 장치를 이라고 합니다 eno1.

인터넷에서 많이 검색하고 VM이 연결할 수 있는 브리지 네트워크를 만드는 스크립트를 작성했습니다. 이 스크립트는 브리지 br0와 TAP 장치를 생성합니다 tap0. 또한 VPN을 통해 호스트에서 정상적인 인터넷 액세스가 가능하도록 라우팅 테이블을 편집합니다. 테이블은 다음과 같습니다.

~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.1.102.1      128.0.0.0       UG        0 0          0 tun0
10.1.102.0      0.0.0.0         255.255.255.0   U         0 0          0 tun0
81.95.5.34      192.168.178.1   255.255.255.255 UGH       0 0          0 br0
128.0.0.0       10.1.102.1      128.0.0.0       UG        0 0          0 tun0
192.168.178.0   0.0.0.0         255.255.255.0   U         0 0          0 br0

주소와 구성은 다음과 같습니다.

~# ip addr
2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether e0:3f:49:48:eb:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.29/24 brd 192.168.178.255 scope global eno1
       valid_lft forever preferred_lft forever
95: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.1.102.248/24 brd 10.1.102.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fdbf:1d37:bbe0:0:22:6:0:1248/112 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5ee5:c367:ab47:5928/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
96: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
    link/ether 7a:22:5d:99:01:06 brd ff:ff:ff:ff:ff:ff
97: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 7a:22:5d:99:01:06 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.120/24 brd 192.168.178.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 fe80::d731:e2c8:a4f8:224e/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::7822:5dff:fe99:106/64 scope link 
       valid_lft forever preferred_lft forever
98: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:10:76:e0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::790c:464b:74f6:6754/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::fc54:ff:fe10:76e0/64 scope link 
       valid_lft forever preferred_lft forever

VM

위에서 언급했듯이 virt-manager와 에뮬레이터를 사용하여 실행하는 Centos 7 VM입니다 /usr/bin/qemu-system-x86_64. 네트워크 설정에서 공유 장치( br0)를 virtio장치 모델로 사용합니다.

VM 측면에서는 훨씬 간단해 보입니다. 라우팅 테이블:

~# netstat -rn
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags   MSS Fenster irtt Iface
0.0.0.0         192.168.178.1   0.0.0.0         UG        0 0          0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0

주소는 다음과 같습니다.

~# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:10:76:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.105/24 brd 192.168.178.255 scope global noprefixroute dynamic eth0
       valid_lft 860890sec preferred_lft 860890sec
    inet6 fe80::47ed:5e58:2c27:6b50/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

내 문제:

VM이 내 VPN을 통해 트래픽을 전송하지 않는 것 같습니다(VM은 호스트보다 Google에 대한 핑 시간이 더 빠르며 역시 mtr다릅니다). 대신 인터넷으로 직접 연결하세요. 라우팅 테이블을 편집해야 할 것 같은데 방법을 모르겠습니다.

기본 경로의 IP를 192.168.178.120( br0IP) 및 192.168.178.29( eno1IP)로 변경하는 데 지쳤지만 작동하지 않았습니다. 또한에 대한 IP를 생성하고 tap0이를 VM의 기본 경로로 설정했지만 그 역시 작동하지 않았습니다.

관련 정보