Windows VPNを使用したいのですが、ネットワーク接続全体を引き継がないように、特定のネットワークのみに使用します。
たとえば、VPNがデフォルトルートになる代わりに、192.168.123.0 / 24のルートのみにします
(この質問にはUbuntu向けの解決策があることがわかりますが、Windowsでもこれを行う必要がある場合があります)
これを自動化して、VPNに接続するたびにこれを行うことができますか?
Windows VPNを使用したいのですが、ネットワーク接続全体を引き継がないように、特定のネットワークのみに使用します。
たとえば、VPNがデフォルトルートになる代わりに、192.168.123.0 / 24のルートのみにします
(この質問にはUbuntu向けの解決策があることがわかりますが、Windowsでもこれを行う必要がある場合があります)
これを自動化して、VPNに接続するたびにこれを行うことができますか?
回答:
VPNのプロパティ、Networking
タブ、Internet Protocol (TCP/IP)
プロパティAdvanced
、、チェックを外すことで、接続全体の引き継ぎをオフにできますUse default gateway on remote network
。これは192.168.123.0/24
、VPNサーバーのセットアップに応じて、ルートを残す場合とできない場合があります。そうでない場合は、毎回手動でルートを追加する必要がありますが、それをバッチファイルに入れることもできます。
ルートを手動で追加するには、次を実行します(管理者として):
route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254
この例では192.168.0.12
、VPNゲートウェイを介したIPへの永続的な(再起動後にコマンドを実行する必要はありません)ルートを作成します10.100.100.254
。
詳細については、http://technet.microsoft.com/en-us/library/bb878117.aspxをご覧ください。
私は正常に使用TRS-80 @これを達成するための技術。
私は自宅で仕事をしており、電子メールのために企業ネットワークにVPN接続する必要があります(Webメールが嫌いです!!)。
同時に、私は情報のために絶えずサーフィンする必要があり、バックグラウンドミュージックにもYouTubeが必要です。今では、YouTubeをVPNからストリーミングすることは絶対に望まないでしょう。:)
私がしたことは、@ TRS-80をフォローすることだけでした。
VPNのプロパティ、[ネットワーク]タブ、[インターネットプロトコル(TCP / IP)]プロパティ、詳細設定、[リモートネットワークでデフォルトゲートウェイを使用]のチェックを外す
そして、自分でやった:
[DNS]タブで、[この接続アドレスをDNSに登録する]にチェックマークを付けます
すべてがシームレスに機能します!
routeコマンドでインターフェイスを直接ポイントする必要があることがわかりました。それがなければ、WindowsはVPNの代わりにメインネットワークカードインターフェイスを使用します。私の場合、次のようになります
route -p add 192.168.10.187 mask 255.255.255.255 0.0.0.0 IF 26
:: ^destination ^mask ^gateway ^interface
「IF 26」に注意してください。
Windows 8 以降でAdd-VpnConnectionRouteコマンドレットを使用します。
Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
CMAKを使用して、クライアントがダウンロードできるルーティングファイルをセットアップすると...ウィンドウがルーティングファイルをダウンロードし、必要に応じてルートを調整します。デフォルトルートを削除するオプションがあります...そして、様々な静的ルートを追加します。これは、スプリットトンネルbtwとして知られています。
ここに良い方法があります:http : //blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx
ソリューションをミックスに追加したい。Windows 7以降のCygwinを搭載したUNIXシェルで実行されますが、ビルド14986後のMSYS2、Bash-on-Windows [WSL]、またはBusybox for Windowsでも動作するはずです。管理者権限で実行する必要があります。
いくつかの設定があり、明示的に設定しなかったもののいくつかを検出しようとします。また、インターフェイス番号(IF)を明示的に設定して、一部のユーザー(私のような)が他のソリューションでここで抱えていた問題に対処します。
#!/bin/sh
# these three settings are required
adapter_name='VPN Connection'
username=
password=
# This setting here might be important because it's about the target network
# and in some cases it can't be properly determined automatically so this might
# be then worth setting.
# Format is in CIDR notation with the network address and a forward slash and
# the amount of network bits
target_network=192.168.0.0/24
# the IP you will get on the target network, also the VPN gateway on your
# local machine, you normally don't need to set this as the script tries to
# detect it
ip=
# optional setting for metric which normally shouldn't be necessary,
# except in te very rare cases where it should be set to a value lower than all
# other routes that might match the target network
metric=
# experimental setting to delete routes to the target network prior and after
# should normally not be needed unless this script fails and you get error
# messages like 'The route addition failed: The object already exists.'
route_cleanup=F
prog_name=${0##*/}
msg() {
printf '%s: %s\n' "$prog_name" "$*"
}
die() {
msg "$*" >&2
exit 1
}
[ "$adapter_name" ] || die "Adapter name not set!"
[ "$username" ] || die "Username not set!"
[ "$password" ] || die "Password not set!"
if [ "$(uname -o)" != 'MS/Windows' ]; then
id -G | grep -qE '\<0|544\>' || die 'Not running with admin rights.'
fi
msg "Disconnecting any existing connection that might exist."
rasdial.exe "$adapter_name" /d
msg "Connecting"
rasdial.exe "$adapter_name" "$username" "$password"
if [ ! "$ip" ]; then
msg "Getting IP address on target network."
ip=$(netsh.exe interface ip show config name="$adapter_name" |
grep -a 'IP Address' | awk -F'[: ]+' '{print $4}')
[ "$ip" ] || die 'Could not get IP! Exiting.'
msg "Detected IP address as '$ip'."
fi
if [ ! "$target_network" ]; then
msg "Getting target network."
target_network=$(netsh.exe interface ip show config name="$adapter_name" |
grep -a 'Subnet Prefix' | awk -F'[: ]+' '{print $4}')
[ "$target_network" ] || die 'Could not get target network! Exiting.'
msg "Detected target network as '$target_network'."
fi
msg "Getting VPN interface number."
if=$(ROUTE.EXE print -4 | grep -a "$adapter_name" |
awk -F. '{gsub(" ", "");print $1}')
[ "$if" ] || die 'Could not get interface number! Exiting.'
msg "Detected VPN interface number as '$if'."
if [ "$route_cleanup" = T ]; then
msg "Deleting any potentially already existing routes for the target network."
ROUTE.EXE delete "$target_network"
fi
msg "Adding route for target network."
if [ "$metric" ]; then
ROUTE.EXE add "$target_network" "$ip" IF "$if" Metric "$metric"
else
ROUTE.EXE add "$target_network" "$ip" IF "$if"
fi
msg "VPN should be up now."
msg "Press enter to make it stop."
read -r _
if [ "$route_cleanup" = T ]; then
msg "Deleting route."
ROUTE.EXE delete "$target_network"
fi
msg "Disconnecting."
rasdial.exe "$adapter_name" /d
# msg "Press enter to exit."
# read -r _
exit 0
また、低メトリックを手動で設定する必要がある場合もあります。そうしないと、トラフィックがVPNを宛先とする前にデフォルトルートが一致します。これを行うには、VPNアダプターの[ …プロパティ ]メニュー項目を開くアダプター設定→ [ ネットワーク ]タブ→[ インターネットプロトコルバージョン4(TCP / IP)]プロパティ→[ 詳細] →でチェックを外します。「もちろん、デフォルトゲートウェイを使用する」に加えて「自動メトリック」チェックボックスをオンにし、「インターフェースメトリック:」フィールドの値をデフォルトルートよりも低い値に設定します(ROUTE.EXE -4 print
出力を参照)。
netcatcherのようなものを使用できます- 一度必要なすべてのルートを追加して、それを忘れてください。VPNセッションを接続または切断すると、ルートが自動的に追加および削除されます。VPN IPアドレスが動的に取得された場合(DHCP)、netcatcherはそれをキャッチし、ルートを正しく更新します。
ロシアのフォーラムから:http : //forum.ixbt.com/topic.cgi?id=14 : 43549
ファイルとして保存(例:vpn_route.vbs)およびvpn接続後に実行コマンド
cscript vpn_route.vbs
vpn_route.vbs:
strComputer = "."
strMACAddress = "MAC of VPN interface here (example 00:45:55:00:00:00)"
strTarget = "route target here (example 192.168.123.0)"
strMask = "mask here (example 255.255.255.0)"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where MACAddress = '" & strMACAddress & "'")
For Each objItem in colItems
strIP = objItem.IPAddress(0)
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "route add " & strTarget & " mask " & strMask & " " & strIP
これは、追加のプログラム、バッチファイル、またはコマンドラインを使用せずにWindowsで実行することはできません。別の方法は、VPNを実行できる仮想(または物理)マシンを取得することです。
これほど簡単に説明できるものを達成するのは非常に難しいことは奇妙に思えます。トラフィックを1つのプログラムからVPNインターフェースにルーティングし、他のすべてのプログラムをデフォルトのNICインターフェースにルーティングするのはどれほど難しいでしょうか?そのために仮想マシン全体をセットアップする必要があるのはなぜですか?また、Linuxでも可能ですが、その解決策も洗練されていません。
それも非常に人気があります。同じテーマで何十ものスレッドに出くわしました。だから、誰かがこれのばかげたことに気づいて、それについて何かをすることを願っています。(Windows 8で!)
このソリューションは、属性のないバッチファイルからのものです。それは少し適応されています。
Windows 7の手順
このスクリプトは、再起動するまで、あなたのVPN経由のトラフィックにとルート接続する-あなたは置き換えることができるroute add
とroute -p add
の変化が持続するために、しかし、あなたはあなたのVPNとの永続的なIPを持っていない場合は、それが最終的にするとき、あなたのVPNのIPの変更作業を停止します。
Networking
タブをクリックしますProperties
Advanced
Use default gateway[...]
スクリプト内の次のものを置き換える必要があります。
<VPN>
作成したVPN接続の名前<USER>
VPNユーザー名で<PASS>
VPNパスワード付き<TARGET>
VPN経由でルーティングするIPアドレスを使用します(さらに多くのアドレスをルーティングする場合は、ターゲットが使用されている3行を複製します)注:ファイルにパスワードを保存したくない場合は、スクリプトの最初の行の後に次を置き換え<PASS>
て%password%
追加しますset password= Input password:
。
脚本
@echo off
@echo make sure to be disconnected!
rasdial <VPN> /d
@echo start to connect to vpn
rasdial <VPN> <USER> <PASS>
netsh interface ip show config name="<VPN>" | findstr "IP" > ip.dat
set /p ip= < ip.dat
del ip.dat
set ip=%ip:~-12%
@echo VPN IP is %ip%
set target=<TARGET>
@echo Add route for %target%
route add %target% mask 255.255.255.255 %ip%
timeout /T 3 > nul
ネットワークについてあまり知らない私のような初心者向けの「短い」ガイド。ここではそれほど新しいものではありませんが、以前の回答や他の関連するスレッドで説明されているすべての優れたオプションの概要です。全体の手順は、3つの基本的な手順で構成されています。
1)すべてのトラフィックがVPNを経由しないようにします。そのためにUse default gateway on remote network
は、VPN設定のチェックボックスをオフにする必要があります。IPv4とIPv6の両方について、このチェックボックスをオフにしてください。通常、VPN接続のIPv6プロトコルを完全に無効にします。
!これらのルールがどこでどのように構成されているかは正確にはわかりませんが、そのようなシナリオは存在します。おそらく、VPNネットワーク管理者が行った魔法のようです。
2)VPN経由の必要なトラフィックのみを作成します。このためには、ルートを定義する必要があります。ここには3つのオプションがあります。
2.1)VPNゲートウェイ経由の永続的なルートを追加します。
route -p add a.b.c.d/<CIDR> w.x.y.z
または route -p add a.b.c.d mask e.f.g.h w.x.y.z
ここで、「VPNゲートウェイ」=「VPNネットワーク上のIP」= w.x.y.z
およびターゲットアドレス/ネットワーク= a.b.c.d
です。VPN接続名をw.x.y.z
実行ipconfig
して検索することで見つけることができます。PowerShellを使用している場合は、実行することでコンパクトな出力を得ることができますipconfig | grep -A5 PPP
(各PPP接続を見つけると5行出力されます)。
短所:VPN IPが変更される場合、ルートを再作成する必要があります。
2.2)VPNネットワークインターフェイス経由で永続的なルートを追加します。
route -p add a.b.c.d/<CIDR> 0.0.0.0 IF <interface number>
どこa.b.c.d
がターゲットアドレス/ネットワークでありinterface number
、VPN接続の識別子です。このIDは、を実行することで見つけることができます。netstat -rn
または、よりコンパクトな出力の場合は、netstat -rn | grep -A10 'Interface List'
。
長所:VPNアドレス(w.x.y.z
)が変更されても、何も変更する必要はありません。
短所:VPN接続を削除する場合、新しいIDでルートを再作成する必要があります。
2.3)PowerShellコマンドレットを使用します。
Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>
長所:VPN接続が確立されるたびに必要なルートが追加され、切断されるたびに削除されます。
短所:Get-VpnConnectionRoutes
コマンドレットがないため、これらのルールを管理するのが難しい場合があります。
3)ルーティングが期待どおりに機能することを確認してください!
永続的なルートを追加した場合は、を実行して確認できますnetstat -rn | grep -A10 'Persistent Routes'
。
そして最後に、tracert
VPN経由でアクセスされるはずのIPアドレスと、VPNなしで動作するはずのIPアドレスの両方に対して、いくつかのコマンドを実行します。