質問
ルーターとして機能するUbuntuデスクトップコンピューターでVPNを起動すると、接続されたサブネットはインターネット接続を失いますが、まだアクセス可能(LAN)です。理想的には、VPNがアクティブなときにVPNトンネルを介してルーティングすることにより、接続されたサブネットがインターネットアクセスを再取得できるようにする方法を知りたいと思います。
コンテキスト
次のネットワークレイアウトがあります。
virtualBox仮想マシンのeth0上のサブネット172.16.0.0/20。
インターネットにアクセスできるゲートウェイ192.168.0.1に接続するeth0:0のサブネット192.168.0.0/24。
これは/ etc/network/interfacesファイルに示されています。
auto lo
iface lo inet loopback
# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
address 172.16.0.1
netmask 255.255.0.0
gateway 192.168.0.164
dns-nameservers 8.8.8.8
# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
address 192.168.0.164
netmask 255.255.255.0
dns-nameservers 8.8.8.8
gateway 192.168.0.1
Eth0上のパケットは、マスカレードでeth0:0を介して転送され、通常のインターネット接続は問題ありません。ただし、このルーターでVPNトンネルを開始すると、eth0サブネット上のVMのインターネット接続が失われます(まだルーターに残っています)。
以下は、トンネルがアクティブな場合のifconfigの出力です。
eth0 Link encap:Ethernet HWaddr 00:1f:bc:01:c3:ab
inet addr:172.16.0.1 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208264321 (208.2 MB) TX bytes:16660945 (16.6 MB)
Interrupt:16
eth0:0 Link encap:Ethernet HWaddr 00:1f:bc:01:c3:ab
inet addr:192.168.0.164 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:22755054 (22.7 MB) TX bytes:22755054 (22.7 MB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ソリューションはrouting tableと関係があると思われます。次のように表示されますトンネルがアクティブな場合:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.8.0.9 128.0.0.0 UG 0 0 0 tun0
default 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
10.8.0.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0
10.8.0.9 * 255.255.255.255 UH 0 0 0 tun0
37.139.23.49 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.8.0.9 128.0.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
および次のトンネルが非アクティブの場合:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
VMのVirtualbox構成:
VMの1つ/etc/network/interfaces
ファイル:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 172.16.0.3
netmask 255.255.0.0
network 172.16.0.0
broadcast 172.16.255.255
gateway 172.16.0.1
dns-nameservers 8.8.8.8
これはBridged Networkingセットアップでは機能しません。 VirtualBoxドキュメント から:
ブリッジネットワーク
これは、ゲストでのネットワークシミュレーションやサーバーの実行など、より高度なネットワークニーズに対応しています。有効にすると、VirtualBoxはインストールされているネットワークカードの1つに接続し、ホストオペレーティングシステムのネットワークスタックを回避してネットワークパケットを直接交換します。
仮想マシンはeth0
を直接使用しているため、仮想マシン上で実行されているトンネルへのtun0
インターフェースを認識していません。別の仮想ネットワーク構成を使用する必要があります。
(特に)これらのオプションがあります:
ネットワークアドレス変換(NAT)は、最も単純なソリューションです。 VirtualBoxは、ホストで利用可能なインターネット接続に関係なく、VMをNATします。これは、VMに対して完全に透過的です。ただし、これにより、ホストからVMへの接続またはVM間の接続が除外されます。
Host-only Networkingを使用して、VMとホストを含む適切なサブネットを作成します。これにより、VMにあるインターフェイス構成を変更する必要はありませんが、ホストをゲートウェイとルーターに設定する必要がありますandNAT VMを外部に(そのeth0
またはtun0
を介して)。
上記を組み合わせます。各VMに2つのインターフェイスを与えます。1つは外部へのゲートウェイ(VirtualBoxのNAT)ともう1つはホストオンリーLAN。
VirtualBoxの実験的NATネットワーク設定を試してください。 2019年の更新:この機能は成熟してから:ホストのNATに接続し、Paravirtualizedネットワークを選択します(virtio-net)アダプタータイプ。
Windowsホストとlinux(mint)ゲストを備えたVirtualBoxの場合、[ネットワークUI]タブに移動し、[アダプター] => [接続先:NAT]および[アダプタータイプ:準仮想化ネットワーク]に設定します。その後、VMを起動すると、VPNネットワークを使用できるようになります。
どこでもこのソリューションを探した後、私は最終的に多くの構成変更を必要とせず、本当にシンプルな実用的なソリューションを見つけました。デフォルトのNATネットワークを使用して、ターミナルにこれを入力します。
VBoxManage modifyvm "VM name" --natdnsproxy1 on
同じ問題がありました。ここに私がそれを解決した方法があります:
ifconfig vboxnet0
を指すようにして、それを見つけます。最後のステップは、vboxnet0からのパケットをVPNにルーティングすることです。
すべてのトラフィックをVPN経由でルーティングする場合:
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
10.8.0.5
はtun0ゲートウェイ、192.168.5.0/24
はvboxnet0ネットワーク範囲です。
特定のトラフィックのみをVPN経由でルーティングする場合:
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95
10.8.0.5
はtun0ゲートウェイ、192.168.43.95
はwlan0
のゲートウェイ、192.168.5.0/24
はvboxnet0ネットワークの範囲です。
注:このソリューションでは、ゲストOSをホストOSと同じ方法で処理できます。ホストOSでVPNを通過するように構成されたIPのみがゲストで通過します。
Host vpnを使用した浮浪者ボックスの便利な情報を次に示します。基本的に、natdnshostresolver1オプションを設定する必要がありますVagrantのpublic_network設定を使用する場合、これはではなく動作することに注意してください
config.vm.provider :virtualbox do |vb|
# ---- other options....
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
http://renier.morales-rodriguez.net/post/90674523562/sharing-Host-vpn-with-virtualbox-guesthttp://blog.geekslikeshinythings.com/2016/ 05/sharing-Host-vpn-with-vagrant-rob-allen.html