
tl;dr 호스트는 VPN을 통해 인터넷에 연결하고 이 호스트의 VM은 이 VPN을 통과하지 않습니다(그러나 그래야 합니다). 네트워크 구성이 올바르지 않은 것 같습니다.
주인
호스트(arch Linux)는 openvpn과 구성 파일을 사용하여 VPN 네트워크에 연결하므로 tun0
openvpn에서 생성된 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
( br0
IP) 및 192.168.178.29
( eno1
IP)로 변경하는 데 지쳤지만 작동하지 않았습니다. 또한에 대한 IP를 생성하고 tap0
이를 VM의 기본 경로로 설정했지만 그 역시 작동하지 않았습니다.