
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 を使用して/usr/bin/qemu-system-x86_64
エミュレーターとして実行する CentOS 7 VM です。ネットワーク設定では、デバイス モデルとして共有デバイス ( 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 への ping 時間が速く、またmtr
異なっています)。代わりに、インターネットに直接送信します。ルーティング テーブルを編集する必要があると思いますが、方法がわかりません。
192.168.178.120
デフォルト ルートの IP を( br0
IP) に変更し、さらに192.168.178.29
( IP) にも変更しようとしましたeno1
が、うまくいきませんでした。 の IP も作成しtap0
、VM でデフォルト ルートとして設定しましたが、それでもうまくいきませんでした。