it-swarm.asia

Bagaimana saya bisa membuat lalu lintas selektif rute Windows VPN (berdasarkan jaringan tujuan)?

Saya ingin menggunakan VPN Windows tetapi hanya untuk jaringan tertentu, sehingga tidak mengambil alih seluruh koneksi jaringan saya.

mis., Alih-alih VPN menjadi rute default, jadikan hanya rute untuk 192.168.123.0/24

(Saya dapat melihat bahwa ada solusi untuk ini untuk Ubuntu dalam pertanyaan ini , tetapi kadang-kadang saya harus melakukan ini pada Windows juga)

Bisakah ini diotomatiskan sehingga setiap kali saya terhubung ke VPN ia melakukan ini?

136
Legooolas

Anda dapat mematikan pengambilan alih seluruh koneksi Anda dengan membuka properti VPN, tab Networking, properti Internet Protocol (TCP/IP), Advanced, untick Use default gateway on remote network. Ini mungkin atau mungkin tidak meninggalkan rute ke 192.168.123.0/24 tergantung pada pengaturan server VPN. Jika tidak, Anda harus menambahkan rute secara manual setiap kali, meskipun Anda bisa memasukkannya ke dalam file batch.

Untuk menambahkan rute secara manual, jalankan (sebagai administrator):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Contoh ini akan membuat rute yang persisten (tidak perlu menjalankan perintah setelah reboot) ke IP 192.168.0.12 melalui gateway VPN 10.100.100.254.

Lebih lanjut tentang ini di http://technet.Microsoft.com/en-us/library/bb878117.aspx

136
TRS-80

Saya berhasil menggunakan teknik @ TRS-80 untuk mencapai ini.

Saya bekerja dari rumah dan harus VPN ke jaringan perusahaan untuk email saya (saya benci webmail !!).

Pada saat yang sama, saya harus terus berselancar untuk mendapatkan info dan juga membutuhkan youtube untuk musik latar belakang saya ... Sekarang Anda pasti tidak ingin melakukan streaming youtube dari VPN karena itu membuatnya seperti Robot Singing !!! :)

Yang saya lakukan adalah mengikuti @ TRS-80:

properti dari VPN, tab Networking, "Internet Protocol (TCP/IP)" properti, Advanced, hapus centang "Gunakan gateway default pada jaringan jarak jauh"

dan kemudian lakukan sendiri:

di bawah tab DNS, centang "daftarkan alamat koneksi ini dalam DNS"

Semua bekerja dengan mulus!

19
bPratik

Memang jawaban ini tidak mencerminkan permintaan Anda tetapi saya menggunakan VM khusus untuk tujuan ini. Dengan begitu hanya jaringan di dalam VM yang dibatasi oleh rute.

Anda mungkin menemukan beberapa jawaban yang lebih baik oleh orang lain tetapi setidaknya ini dapat memberi Anda sesuatu untuk dipertimbangkan karena ini merupakan solusi mudah setelah VM telah dibuat.

8
Wayne

Saya menemukan bahwa itu perlu langsung menunjuk antarmuka dalam perintah rute. Tanpa itu, Windows akan menggunakan antarmuka kartu jaringan utama, bukan VPN. Dalam kasus saya, sepertinya

route -p add 192.168.10.187 mask 255.255.255.255 0.0.0.0 IF 26
::           ^destination        ^mask           ^gateway   ^interface

catat 'IF 26'.

7
Dmitry Petrov

jika Anda memiliki IPV4 dan IPV6 Anda harus menghapus centang "Gunakan gateway default pada jaringan jarak jauh" di kedua tempat, bahkan jika Anda hanya menggunakan IPV4

4
Dave

Jika Anda menggunakan CMAK dan menyiapkan file perutean yang dapat diunduh klien ... windows akan mengunduh file perutean & sesuaikan rute yang sesuai. Ada opsi untuk menghapus rute default ... dan menambahkan berbagai rute statis & semacamnya. Ini dikenal sebagai btw split-tunnel.

Ada caranya di sini: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

Saya ingin menambahkan solusi saya ke dalam campuran. Ini berjalan pada UNIX Shell yang bertenaga Cygwin pada Windows 7 atau yang lebih baru tetapi juga dapat bekerja dengan MSYS2, Bash-on-Windows [WSL] setelah build 14986, atau Busybox untuk Windows). Perlu dijalankan dengan hak istimewa admin.

Ini memiliki beberapa pengaturan dan mencoba untuk mendeteksi beberapa hal yang tidak Anda atur secara eksplisit. Itu juga menetapkan nomor antarmuka (IF) secara eksplisit untuk melawan beberapa masalah yang dimiliki beberapa pengguna (seperti saya) dengan solusi lain di sini.

#!/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

Perlu juga dicatat bahwa mungkin perlu secara manual menetapkan metrik rendah atau jika tidak, rute default akan cocok sebelum lalu lintas diperuntukkan untuk VPN. Anda melakukan ini dengan masuk ke pengaturan adaptor tempat Anda membuka "... Properti" item menu untuk adaptor VPN → "Tab Jaringan" "Versi Protokol Internet 4 (TCP/IP)" Properti → "Lanjutan" → dan di sana Anda hapus centang pada kotak "Metrik otomatis" (selain the "Gunakan gateway default ..." tentu saja) dan atur nilainya dalam "Metrik antarmuka:" bidang ke nilai yang lebih rendah dari rute default (lihat output ROUTE.EXE -4 print).

2
phk

Gunakan Tambah-VpnConnectionRoute cmdlet di Windows 8+.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
2
Der_Meister

Anda dapat menggunakan sesuatu seperti netcatcher - cukup tambahkan semua rute yang Anda butuhkan satu kali dan lupakan saja. Ini akan secara otomatis menambah dan menghapus rute ketika Anda menghubungkan atau memutuskan sesi VPN Anda. Jika alamat IP VPN Anda diperoleh secara dinamis (DHCP), netcatcher akan menangkapnya dan memperbarui rute dengan cara yang benar.

1
Andy

dari forum rusia: http://forum.ixbt.com/topic.cgi?id=14:43549

simpan sebagai file (mis: vpn_route.vbs) dan setelah vpn terhubung jalankan perintah

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
1
shibormot

Agak lama tapi saya menemukan cara untuk melakukan ini menggunakan komputer lain. Saya punya laptop tempat saya mengatur koneksi VPN dan di sana saya punya FreeProxy diatur dengan Socks5 ..

Kemudian saya mengatur firefox pada mesin klien saya untuk menggunakan server proxy laptop .. hasilnya adalah jika saya menggunakan FireFox atau apa pun yang diatur untuk menggunakan proxy Socks5 itu, ia akan menggunakan VPN, jika tidak menggunakan perutean standar ..

1
Lonnie

Ini tidak dapat dilakukan di Windows tanpa menggunakan program tambahan, file batch, atau baris perintah. Alternatifnya adalah dengan mendapatkan mesin virtual (atau fisik) yang dapat Anda gunakan untuk menjalankan VPN.

Tampaknya aneh bahwa sesuatu yang mudah dijelaskan seperti ini sangat sulit dicapai. Seberapa sulitkah untuk merutekan lalu lintas dari satu program ke antarmuka VPN dan semua program lainnya ke antarmuka standar NIC? Mengapa kita perlu mengatur seluruh mesin virtual untuk itu? Dan dengan Linux itu mungkin tetapi solusinya juga tidak terlalu elegan.

Ini sangat banyak dicari juga: Saya menemukan puluhan utas tentang topik yang sama. Jadi saya hanya berharap seseorang menyadari kegilaan ini dan melakukan sesuatu tentang itu. (Di Windows 8!)

Solusi ini berasal dari file batch yang tidak disalurkan . Itu telah sedikit diadaptasi.

Petunjuk untuk Windows 7

Skrip akan terhubung ke dan merutekan lalu lintas melalui VPN Anda hingga reboot - Anda dapat mengganti route add dengan route -p add agar perubahan tetap ada, tetapi jika Anda tidak memiliki IP persisten dengan VPN Anda, skrip tersebut akhirnya akan berhenti berfungsi ketika VPN IP Anda perubahan.

  1. Buka Pusat Jaringan dan Berbagi
  2. Buka properti untuk koneksi VPN Anda
  3. Klik tab Networking
  4. Untuk IPv4 dan 6:
    1. Klik Properties
    2. Klik Advanced
    3. Hapus centang Use default gateway[...]
  5. Tutup semua yang dibuka dari langkah sebelumnya
  6. Edit dan simpan skrip kumpulan yang ditemukan di bawah ini
  7. Jalankan sebagai administrator

Anda harus mengganti yang berikut dalam skrip:

  • <VPN> dengan Nama koneksi VPN yang Anda buat
  • <USER> dengan nama pengguna VPN
  • <PASS> dengan kata sandi VPN
  • <TARGET> dengan alamat IP yang Anda inginkan dialihkan melalui VPN (jika Anda ingin merutekan lebih banyak alamat, cukup duplikat tiga baris di mana target digunakan)

Catatan: Jika Anda tidak ingin menyimpan kata sandi dalam file, ganti <PASS> dengan %password% dan tambahkan yang berikut setelah baris pertama skrip: set password= Input password:.

Skrip

@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
1
Xantippe