Windows VPN'i seçici trafiği yönlendirerek (hedef ağa göre) nasıl ayarlayabilirim?


139

Windows VPN'i kullanmak istiyorum, ancak yalnızca belirli bir ağ için, böylece ağ bağlantımın tamamını kullanmayacak.

Örneğin, VPN varsayılan rota haline gelmek yerine, yalnızca 192.168.123.0/24 rotasını yapın.

( Bu soruda Ubuntu için bunun için bir çözüm olduğunu görebiliyorum , ancak bazen bunu Windows'ta da yapmak zorundayım)

Bu otomatikleştirilebilir mi, böylece VPN'e her bağlandığımda bunu yapıyor mu?


VPN üzerinden bir siteyi filtrelemekle ilgili bir soru var mı? Buradaki cevaplar sadece VPN'in arkasında tek bir site olduğu durumda işe yarayacak gibi görünüyor. Çin'deyim ve kullanmak istediğim sitelerin yaklaşık yarısı engelleniyor, bu yüzden VPN'den geçmelisiniz, ancak diğer siteler VPN'siz daha hızlı / sorunsuz.
hippietrail

Yanıtlar:


139

Tüm bağlantınızı devralarak VPN, Networkingtab, Internet Protocol (TCP/IP)properties Advanced, untick özelliklerine giderek kapatabilirsiniz Use default gateway on remote network. Bu 192.168.123.0/24, VPN sunucusunun ayarlarına bağlı olarak bir rota bırakabilir veya bırakmayabilir . Olmazsa, bir toplu iş dosyasına yerleştirebilseniz de rotayı her seferinde manuel olarak eklemeniz gerekir.

Rotayı manuel olarak eklemek için, (yönetici olarak) çalıştırın:

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Bu örnek kalıcı olacaktır (yeniden başlatma sonrası komutu çalıştırmak gerekmez) 192.168.0.12VPN ağ geçidi üzerinden IP'ye yönlendirmek 10.100.100.254.

Bu konuda daha fazlası için: http://technet.microsoft.com/en-us/library/bb878117.aspx


1
"Rotayı manuel olarak eklemeniz gerekecek" ... nasıl? Birisi vpn'den geçmesi için "192.168.10.123" diyerek nasıl başka bir şey yapmaz?
Timothy Khouri

16
Şahsen, sadece onay kutusunu kapatmak yeterli olduğunu buldum. Hiçbir rota eklemek zorunda değildim. Her şeyin çok fazla iz bırakmadan bekleyeceğimi doğruladım.
eidylon

1
Aynı, bu onay kutusu gerekli olan tek şeydi.
Luk

1
Lütfen açıkla. VPN üzerinden hangi trafik yönlendiriliyor? Sadece VPN sunucusunun IP'sini hedefleyen trafik mi? Örneğin, VPN bağlantısı "my.domain.com" 'a giderse, o zaman istemcideki "my.domain.com"' a giden tüm trafik VPN üzerinden gider ve diğer her şey varsayılan ağ geçidine gider mi?
Triynko

1
"Route print" komutunu kullandım ve Windows 7'nin yarattığı rotaların yanlış olduğunu doğruladım. VPN'imin IP'sine yönlendirilen trafik VPN'ye gönderilmiyordu ... bunun yerine yerel ağ geçidime gönderiyordu. Ayrıca tabloda birkaç dairesel giriş vardı. Oluşturulan rotayı sildim, sonra doğru rotayı elle ekledim, böylece VPN sunucumun IP adresi girişi VPN'nin ağ geçidini ve arabirim için istemcinin yerel IP'sini kullanırdı. VPN sunucuma giden trafik VPN tüneli üzerinden başarıyla yönlendirildi ve diğer tüm trafik beklendiği gibi etkilenmedi. İyi çalışıyor.
Triynko

20

Bunu başarmak için @ TRS-80'in tekniğini başarıyla kullandım .

Evden çalışıyorum ve e-posta adresim için şirket ağına VPN uygulamak zorundayım (webmail'den nefret ediyorum !!).

Aynı zamanda, sürekli bilgi almak için sörf yapmam ve arka plan müziğim için youtube'a ihtiyacım var ... Şimdi kesinlikle bir VPN'den youtube yayınlamak istemiyorsunuz çünkü bu bir Robot Singing gibi geliyor! :)

Tek yaptığım @ TRS-80'in takip etmesiydi:

VPN'nin özellikleri, Ağ sekmesi, "İnternet Protokolü (TCP / IP)" özellikleri, Gelişmiş, "Uzak ağda varsayılan ağ geçidini kullan" seçeneğinin işaretini kaldırın.

ve sonra kendim yaptım:

DNS sekmesi altında, "bu bağlantı adreslerini DNS'ye kaydet" i işaretleyin

Her şey sorunsuz çalışıyor!


9

Bu cevabın verilmiş olması talebinizi yansıtmıyor, ancak bunun için özel olarak bir VM kullanıyorum. Bu şekilde, yalnızca VM içindeki ağ yollar tarafından kısıtlanır.

Diğer insanlar tarafından daha iyi cevaplar bulabilirsin, ama en azından bu, VM oluşturulduktan sonra kolay bir çözüm olarak düşünecek bir şeyler verebilir.


Bu, donanımınızın iyi kullanabilmesi koşuluyla iyi bir çözümdür.
Enigma

Bu ipliği bulana kadar yıllarca kullandı. :)
ov

7

Rotanın komutunda doğrudan arayüzü işaret etmenin gerekli olduğunu buldum. Bu olmadan, Windows VPN yerine ana ağ kartı arayüzünü kullanacak. Benim durumumda, öyle görünüyor

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

'IF 26'ya dikkat edin.


Bu benim için de işe yaradı. Hangi arayüze ihtiyacınız olduğunu bulmak için sadece "rota yazdırma" komutunu yürütün ve mevcut arayüzlerin listesini gösteren ilk satırları kontrol edin (VPN'inizi orada bulun ve IF - kontrol edin - ilk sütunda olacak).
Funbit,

Bu konuda mükemmel bir yazı var: link . Varsayılan ağ geçidi IP'si olarak 0.0.0.0 kullanmak IP'nin de çok iyi çalışıyor gibi gözüküyor, bu yüzden değişim sırasında ayarlanması gerekmiyor. Bu cevaba dahil etmek harika olurdu, çünkü en iyisinden çok daha kullanışlı.
lpd


4

IPV4 ve IPV6'ya sahipseniz, yalnızca IPV4 kullanıyor olsanız bile, her iki yerde de "Uzak ağda varsayılan ağ geçidini kullan" seçeneğinin işaretini kaldırmanız gerekir.



2

Çözümümü karışıma eklemek istiyorum. Windows 7 veya daha yeni sürümlerde Cygwin destekli bir UNIX kabuğunda çalışır ancak 14986 sürümünden sonra MSYS2, Windows'ta Bash [WSL] veya Windows için Busybox ile de çalışmalıdır). Yönetici ayrıcalıklarıyla çalıştırılması gerekiyor.

Bazı ayarları var ve açıkça ayarlamadığınız bazı şeyleri algılamaya çalışıyor. Ayrıca, bazı kullanıcıların (benim gibi) buradaki diğer çözümlerle yaşadığı bazı sorunları gidermek için arayüz numarasını (IF) açıkça belirler.

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

Ayrıca, düşük bir metriği manuel olarak ayarlamanız gerekebileceğini de unutmayın, aksi takdirde varsayılan yol, VPN'ye yönlendirilen trafikten önce eşleşir. Bunu , VPN adaptörü için "… Özellikler" menü noktasını açtığınız adaptör ayarına giderek → "Ağ" sekmesi → "İnternet Protokolü Versiyon 4 (TCP / IP)" Özellikler → "Gelişmiş""Otomatik ölçü" (ek olarak onay kutusu "varsayılan ağ geçidi ..." elbette) ve değeri ayarlayın : "Arayüz metrik" varsayılan yolun (bkz daha düşük bir değere alanını ROUTE.EXE -4 printçıkışı).


1

Biraz eski ama başka bir makine kullanarak bunu yapmanın bir yolunu buldum. VPN bağlantısını kurduğum bir dizüstü bilgisayarım var ve orada Socks5 ile ayarlanmış FreeProxy'im var.

Ardından dizüstü bilgisayarımın proxy sunucusunu kullanmak için istemci makinemde firefox kurdum. Sonuçta FireFox ya da bu Socks5 proxy kullanmak için ayarlanmış herhangi bir şey kullanırsam VPN kullanacak, aksi halde standart yönlendirme kullanacak.


1

Netcatcher gibi bir şey kullanabilirsiniz - sadece bir kez ihtiyacınız olan tüm rotaları ekleyin ve unutun. VPN oturumunuzu bağladığınızda veya çıkardığınızda otomatik olarak rota ekleyip silecektir. Eğer VPN IP adresiniz dinamik olarak alınırsa (DHCP) netcatcher onu yakalayacak ve rotaları doğru şekilde güncelleyecektir.


2
Bu yazdığınız bir şey ise, bu anseko.com/about.html SSS
Jeff Atwood

1

rusça forumdan: http://forum.ixbt.com/topic.cgi?id=14:43549

dosya olarak kaydet (örneğin: vpn_route.vbs) ve vpn bağlantısından sonra execute command

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

Bu, ek programlar, toplu iş dosyaları veya komut satırı kullanmadan Windows'ta yapılamaz. Alternatif olarak, VPN'yi çalıştırabileceğiniz sanal (veya fiziksel) bir makine elde etmektir.

Bu kadar kolay açıklanabilir bir şeyin elde edilmesi çok zor garip görünüyor. Trafiği bir programdan VPN arayüzüne ve diğer tüm programları varsayılan NIC arayüzüne yönlendirmek ne kadar zor olabilir? Bunun için neden bütün bir sanal makine kurmamız gerekiyor? Ve Linux ile mümkün, ancak çözümü de pek zarif değil.

O da çok aranıyor: Aynı konuda onlarca konuya rastladım. Bu yüzden umarım birileri bunun gülünçlüğünün farkına varır ve bunun hakkında bir şeyler yapar. (Windows 8'de!)

Bu çözüm katılımsız bir toplu iş dosyasındandır . Biraz uyarlandı.

Windows 7 için talimatlar

Betik, yeniden başlatılıncaya kadar VPN'inize bağlanacak ve trafiği yönlendirecek - değişimin devam etmesi için route addbununla route -p adddeğiştirebilirsiniz, ancak VPN'inizle kalıcı bir IP'niz yoksa, sonunda VPN IP'niz değiştiğinde çalışmayı durduracaktır.

  1. Ağ ve Paylaşım Merkezi'ni açın
  2. VPN bağlantınızın özelliklerini açın.
  3. Click Networkingsekmesini
  4. Hem IPv4 hem de 6 için:
    1. Click Properties
    2. Click Advanced
    3. işaretini kaldırın Use default gateway[...]
  5. Önceki adımlardan açılan her şeyi kapatın
  6. Aşağıda bulunan toplu komut dosyasını düzenleyin ve kaydedin
  7. Yönetici olarak çalıştır

Komut dosyasında aşağıdakileri değiştirmeniz gerekir:

  • <VPN> oluşturduğunuz VPN bağlantısının Adı ile
  • <USER> VPN kullanıcı adı ile
  • <PASS> VPN şifresi ile
  • <TARGET> VPN üzerinden yönlendirilmesini istediğiniz IP adresini kullanarak (daha fazla adres yönlendirmek istiyorsanız, hedefin kullanıldığı üç satırı kopyalayın)

Not: Eğer, dosyadaki şifreyi kaydetmek yerine istemiyorsanız <PASS>ile %password%ve senaryonun ilk satırdan sonra aşağıdaki ekleyin: set password= Input password:.

Senaryo

@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

0

Ağlar hakkında fazla bir şey bilmeyen, benim gibi noolar için 'kısa' bir rehber. Burada çok yeni değil, önceki cevaplarda ve diğer ilgili konularda açıklanan tüm iyi seçeneklerin bir özeti. Tüm prosedür 3 temel adımdan oluşmaktadır:

1) Tüm trafiği VPN üzerinden ETMEYİN. Bunun için Use default gateway on remote networkVPN ayarlarındaki onay kutusundaki işareti kaldırın . Hem IPv4 hem de IPv6 için bu onay kutusunun işaretini kaldırdığınızdan emin olun. Genellikle IPPN protokolünü VPN bağlantısı için tamamen devre dışı bırakırım.

(!) Olabilir (bazen) onay kutusunun işaretlenmesinin normal çalışma için yeterli olacağı mümkündür - deneyimlerime göre, VPN bağlantısı kurulduktan sonra gerekli rotaları (gerekli trafiği VPN üzerinden yönlendirecek) otomatik olarak eklenebilir. Bu kuralların nerede ve nasıl yapılandırıldığını tam olarak bilmiyorum, ancak bu senaryo var - muhtemelen VPN ağ yöneticileri tarafından yapılan bir sihir.

2) VPN üzerinden sadece gerekli trafiği yapın . Bunun için yolları tanımlamanız gerekir. Burada 3 seçeneğiniz var:

2.1) VPN ağ geçidi üzerinden kalıcı rota ekle:

route -p add a.b.c.d/<CIDR> w.x.y.z veya route -p add a.b.c.d mask e.f.g.h w.x.y.z

'VPN ağ geçidi' = 'VPN ağındaki IP w.x.y.zadresiniz ' = ve hedef adres / ağ = a.b.c.d. VPN bağlantı adınızı w.x.y.zçalıştırarak ipconfigve arayarak bulabilirsiniz veya PowerShell kullanıyorsanız, yürüterek kompakt çıktı alabilirsiniz ipconfig | grep -A5 PPP(her bir PPP bağlantısını bulduktan sonra 5 satır çıkacak).

Eksileri: VPN IP'niz değişecekse, rotaları yeniden oluşturmanız gerekecektir.

2.2) VPN ağ arayüzü üzerinden kalıcı rota ekle:

route -p add a.b.c.d/<CIDR> 0.0.0.0 IF <interface number>

a.b.c.dHedef adres / ağ nerede ve interface numberVPN bağlantınızın kimliği nerede ? Bu kimlik çalıştırılarak netstat -rnveya daha kompakt çıktı için bulunabilir netstat -rn | grep -A10 'Interface List'.

Artıları: VPN adresiniz ( w.x.y.z) değişecekse hiçbir şeyi değiştirmenize gerek yoktur .

Eksileri: VPN bağlantınızı silerseniz, rotaları yeni ID ile yeniden oluşturmanız gerekir.

2.3) PowerShell cmdlet'ini kullanın:

Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>

Artıları: Her seferinde VPN bağlantısı kurulduğunda ve silindiğinde gerekli rotalar eklenir.

Eksileri: Get-VpnConnectionRoutescmdlet yok bu yüzden bu kuralları yönetmek zor olabilir.

3) Yönlendirmenin beklendiği gibi çalıştığını kontrol edin ve sağlayın!

Kalıcı yollar eklediyseniz, bunları uygulayarak kontrol edebilirsiniz netstat -rn | grep -A10 'Persistent Routes'.

Son olarak, tracertVPN üzerinden erişilmesi beklenen IP adreslerine ve VPN olmadan çalışması gerekenlere karşı birkaç komut çalıştırın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.