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.
(Bunun için Ubuntu/için bir çözüm olduğunu görebiliyorum bu soruda , ama bazen bunu Windows'da da yapmak zorundayım)
Bu otomatikleştirilebilir mi, böylece VPN'e her bağlandığımda bunu yapıyor mu?
VPN, Networking
sekmesi, Internet Protocol (TCP/IP)
özellikleri, Advanced
, untick Use default gateway on remote network
özelliklerine giderek tüm bağlantınızı devralabilirsiniz. Bu, VPN sunucusunun kurulumuna bağlı olarak 192.168.123.0/24
konumuna 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) VPN ağ geçidi 192.168.0.12
üzerinden IP 10.100.100.254
yolunu izleyecektir.
Bu konuda daha fazla http://technet.Microsoft.com/en-us/library/bb878117.aspx
Bunu başarmak için @ TRS-80 'nin 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!
Bu cevabın verilmiş olması talebinizi yansıtmamaktadır, ancak özellikle bu amaç için VM kullanıyorum. Bu şekilde, yalnızca VM içindeki ağ yollar tarafından sınırlandırılı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üşünmen için bir şeyler verebilir.
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.
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.
CMAK kullanıyorsanız ve istemcinin indirebileceği bir yönlendirme dosyası ayarlarsanız ... pencereler yönlendirme dosyasını indirir ve rotaları uygun şekilde ayarlar. Varsayılan rotayı kaldırma ... ve çeşitli statik yollar ekleme seçenekleri vardır. Bu bölünmüş tünel btw olarak bilinir.
Burada iyi bir nasıl yapılır: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx
Çözümümü karışıma eklemek istiyorum. Windows 7 veya daha yeni sürümlerde Cygwin destekli bir UNIX Kabuğu üzerinde çalışır, ancak 14986 sürümünden sonra MSYS2, Windows'ta Bash [WSL] veya Windows için Busybox ile de çalışması gerekir). 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ü öğesini açtığınız adaptör ayarına giderek → "Ağ" sekmesi → "İnternet Protokolü Sürüm 4 (TCP/IP)" Properties → "Advanced" → ve "Automatic metric" onay kutusunun işaretini kaldırdınız ( "Varsayılan ağ geçidini kullan ..." elbette) ve değeri "Arabirim ölçütü:" alan, varsayılan yoldan daha düşük bir değere sahip (bkz. ROUTE.EXE -4 print
çıkışı).
Windows 8+ 'te Add-VpnConnectionRoute cmdlet kullanın.
Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
netcatcher - gibi bir şey kullanabilirsiniz, sadece bir kere 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 yakalar ve rotaları doğru şekilde günceller.
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
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 kullanır, aksi takdirde standart yönlendirme kullanır.
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, unattributed bir toplu iş dosyasından kaynaklanmaktadı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şikliğin devam etmesi için route add
route -p add
ile değiştirebilirsiniz, ancak VPN'inizle sürekli bir IP'niz yoksa, sonunda VPN IP değişir.
Networking
sekmesini tıklayınProperties
öğesini tıklayınAdvanced
öğesini tıklayınUse default gateway[...]
öğesinin işaretini kaldırınKomut dosyasında aşağıdakileri değiştirmeniz gerekir:
<VPN>
<USER>
<PASS>
<TARGET>
(daha fazla adres yönlendirmek istiyorsanız, hedefin kullanıldığı üç satırı kopyalayın)Not: Parolayı dosyaya kaydetmek istemiyorsanız, <PASS>
öğesini %password%
ile değiştirin ve betiğin ilk satırından sonra şunu 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