it-swarm.asia

كيف يمكنني أن أجعل Windows VPN توجيه حركة مرور انتقائية (حسب الشبكة الوجهة)؟

أرغب في استخدام Windows VPN ولكن فقط لشبكة معينة ، بحيث لا يأخذ اتصال الشبكة بالكامل.

على سبيل المثال ، بدلاً من أن تصبح VPN هي المسار الافتراضي ، اجعلها فقط هي المسار لـ 192.168.123.0/24

(أستطيع أن أرى أن هناك حلاً لهذا أوبونتو في هذا السؤال ، ولكن في بعض الأحيان يجب أن أقوم بذلك على Windows أيضًا)

هل يمكن تشغيل هذا تلقائيًا حتى أقوم بذلك عندما أقوم بالاتصال بشبكة VPN؟

135
Legooolas

يمكنك إيقاف تشغيل اتصالك بالكامل من خلال الانتقال إلى خصائص 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

سيقوم هذا المثال بإجراء طريق ثابت (ليس من الضروري تشغيل الأمر بعد إعادة التشغيل) إلى عنوان IP 192.168.0.12 من خلال بوابة VPN 10.100.100.254.

المزيد حول هذا الموضوع على http://technet.Microsoft.com/en-us/library/bb878117.aspx

135
TRS-80

لقد استخدمت بنجاح @ TRS-80 / تقنية لتحقيق ذلك.

أعمل من المنزل وأحتاج إلى VPN على شبكة الشركة للبريد الإلكتروني الخاص بي (أكره البريد الإلكتروني !!).

في نفس الوقت ، أحتاج إلى أن أتصفح باستمرار للحصول على معلومات وأحتاج أيضًا إلى youtube لموسيقي الخلفية ... الآن بالتأكيد لا تريد بث youtube على VPN لأن ذلك يجعل الأمر يبدو وكأنه "Robot Singing !!!" :)

كل ما فعلته هو متابعة @ TRS-80:

خصائص VPN ، علامة تبويب الشبكات ، خصائص "بروتوكول الإنترنت (TCP/IP)" ، خيارات متقدمة ، إلغاء تحديد "استخدام العبارة الافتراضية على الشبكة البعيدة"

ثم فعلت بلدي:

ضمن علامة تبويب DNS ، حدد "تسجيل عناوين الاتصالات هذه في DNS"

جميع الأعمال بسلاسة!

19
bPratik

منحت هذه الإجابة لا تعكس طلبك ولكنني استخدم VM خصيصا لهذا الغرض. بهذه الطريقة فقط الشبكة داخل VM يتم تقييدها بواسطة التوجيهات.

قد تجد بعض الإجابات الأفضل من قِبل أشخاص آخرين ، لكن هذا على الأقل قد يعطيك شيئًا يجب اعتباره حلاً سهلاً بعد إنشاء VM.

8
Wayne

لقد وجدت أنه في حاجة إلى توجيه واجهة مباشرة في قيادة الطريق. بدون ذلك ، سيقوم Windows باستخدام واجهة بطاقة الشبكة الرئيسية ، بدلاً من VPN. في حالتي ، يبدو

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

لاحظ "إذا 26".

7
Dmitry Petrov

إذا كان لديك كل من IPV4 و IPV6 ، فعليك إلغاء تحديد "استخدام العبارة الافتراضية على الشبكة البعيدة" في كلا المكانين ، حتى إذا كنت تستخدم IPV4 فقط

4
Dave

إذا كنت تستخدم CMAK وقمت بإعداد ملف توجيه يمكن للعميل تنزيله ... ستقوم windows بتنزيل ملف التوجيه وتعديل الطرق حسب الاقتضاء. هناك خيارات لإزالة المسار الافتراضي ... وإضافة مسارات ثابتة مختلفة. هذا هو المعروف باسم تقسيم نفق راجع للشغل.

يوجد كيفية جيدة هنا: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

أريد أن أضيف الحل الخاص بي إلى هذا المزيج. إنه يعمل على UNIX Shell تعمل بنظام Cygwin على نظام التشغيل Windows 7 أو الأحدث ولكن يجب أن يعمل أيضًا مع MSYS2 أو Bash-on-Windows [WSL] بعد الإنشاء 14986 أو 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 → "الشبكات" علامة التبويب → "Internet Protocol Version 4 (TCP/IP)" خصائص → "متقدم" → وهناك يمكنك إلغاء تحديد "القياس التلقائي" مربع الاختيار (بالإضافة إلى "استخدام العبارة الافتراضية ..." بالطبع) ، وتعيين القيمة في "Metric Interface:" field إلى قيمة أقل من المسار الافتراضي (انظر إخراج ROUTE.EXE -4 print).

2
phk

استخدام إضافة VpnConnectionRoute cmdlet في نظام التشغيل Windows 8+.

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

يمكنك استخدام شيء مثل netcatcher - ما عليك سوى إضافة جميع المسارات التي تحتاجها لمرة واحدة ونسيانها. سيقوم تلقائيًا بإضافة وحذف الطرق عند الاتصال أو قطع اتصال جلسة VPN الخاصة بك. إذا تم الحصول على عنوان IP الخاص بـ VPN بشكل حيوي (DHCP) فسيقوم netcatcher بالقبض عليه وتحديث الطرق الصحيحة.

1
Andy

من المنتدى الروسي: 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
1
shibormot

قديم بعض الشيء لكني وجدت طريقة للقيام بذلك باستخدام جهاز آخر. لدي جهاز كمبيوتر محمول حيث قمت بإعداد اتصال VPN وهناك قمت بإعداد FreeProxy مع Socks5 ..

ثم قمت بإعداد فايرفوكس على جهاز العميل الخاص بي لاستخدام خادم الوكيل للكمبيوتر المحمول .. والنتيجة هي أنني إذا استخدمت فايرفوكس أو أي شيء تم إعداده لاستخدام وكيل Socks5 ، فسيستخدم VPN ، وإلا فإنه يستخدم التوجيه القياسي ..

1
Lonnie

لا يمكن القيام بذلك في Windows دون استخدام برامج إضافية أو ملفات دفعية أو سطر الأوامر. البديل هو الحصول على جهاز افتراضي (أو مادي) يمكنك تشغيل VPN عليه.

يبدو غريباً أن شيئًا ما سهل التفسير حيث يصعب تحقيقه. ما مدى صعوبة توجيه حركة المرور من برنامج واحد إلى واجهة VPN وجميع البرامج الأخرى إلى الواجهة الافتراضية NIC؟ لماذا نحتاج إلى إعداد آلة افتراضية كاملة لذلك؟ ومع نظام Linux ، يكون الحل ممكنًا ولكن الحل ليس أنيقًا أيضًا.

لقد تم البحث عنها بشكل كبير للغاية: صادفت عشرات الخيوط حول نفس الموضوع. لذلك آمل فقط أن يدرك شخص ما سخافة هذا وأن يفعل شيئًا حيال ذلك. (في ويندوز 8!)

هذا الحل هو من ملف دفعي غير منسوب . لقد تم تكييفها قليلا.

تعليمات لنظام التشغيل Windows 7

سيقوم البرنامج النصي بالاتصال وتوجيه حركة المرور عبر VPN الخاص بك حتى تتم إعادة التشغيل - يمكنك استبدال route add بـ route -p add لاستمرار التغيير ، ولكن إذا لم يكن لديك IP ثابت مع VPN الخاص بك ، فسيتوقف عن العمل عند VPN IP الخاص بك التغييرات.

  1. افتح مركز الشبكة والمشاركة
  2. افتح الخصائص لاتصال VPN الخاص بك
  3. انقر فوق علامة التبويب Networking
  4. لكل من IPv4 و 6:
    1. انقر فوق Properties
    2. انقر فوق Advanced
    3. قم بإلغاء تحديد Use default gateway[...]
  5. أغلق كل شيء تم فتحه من الخطوات السابقة
  6. قم بتعديل وحفظ البرنامج النصي الدفعي الموجود أدناه
  7. تشغيله كمسؤول

تحتاج إلى استبدال ما يلي في البرنامج النصي:

  • <VPN> مع اسم اتصال VPN الذي قمت بإنشائه
  • <USER> باستخدام اسم مستخدم VPN
  • <PASS> بكلمة مرور VPN
  • <TARGET> بعنوان IP الذي تريد توجيهه عبر VPN (إذا كنت ترغب في توجيه المزيد من العناوين ، ما عليك سوى تكرار الأسطر الثلاثة التي يتم فيها استخدام الهدف)

ملاحظة: إذا كنت لا تريد حفظ كلمة المرور في الملف ، فاستبدل <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
1
Xantippe