Làm cách nào tôi có thể tạo lưu lượng chọn tuyến đường Windows VPN (theo mạng đích)?


139

Tôi muốn sử dụng Windows VPN nhưng chỉ cho một mạng cụ thể để nó không chiếm toàn bộ kết nối mạng của tôi.

ví dụ: Thay vì VPN trở thành tuyến mặc định, hãy đặt nó chỉ là tuyến cho 192.168.123.0/24

(Tôi có thể thấy rằng có một giải pháp cho vấn đề này cho Ubuntu trong câu hỏi này , nhưng đôi khi tôi cũng phải làm điều này trên Windows)

Điều này có thể được tự động để bất cứ khi nào tôi kết nối với VPN, nó có thực hiện được không?


Có một câu hỏi liên quan để lọc một loạt các trang web thông qua VPN? Có vẻ như các câu trả lời ở đây sẽ chỉ hoạt động trong trường hợp có một trang web duy nhất đằng sau VPN. Tôi đang ở Trung Quốc và khoảng một nửa các trang web tôi muốn sử dụng đã bị chặn vì vậy nên truy cập VPN nhưng các trang web khác nhanh hơn / mượt mà hơn nếu không có VPN.
hà mã

Tôi đã đi trước và hỏi một câu hỏi mới: superuser.com/questions/925947
hà mã

Câu trả lời:


139

Bạn có thể tắt toàn bộ kết nối của mình bằng cách truy cập vào các thuộc tính của VPN, Networkingtab, Internet Protocol (TCP/IP)thuộc tính Advanced, cho đến khi chọn Use default gateway on remote network. Điều này có thể hoặc không thể để lại một tuyến đường 192.168.123.0/24tùy thuộc vào thiết lập của máy chủ VPN. Nếu không, bạn sẽ phải thêm tuyến theo cách thủ công mỗi lần, mặc dù bạn có thể đặt tuyến đó trong một tệp bó.

Để thêm tuyến theo cách thủ công, hãy chạy (với tư cách quản trị viên):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Ví dụ này sẽ tạo một tuyến liên tục (không cần thiết phải chạy lệnh sau khi khởi động lại) đến IP 192.168.0.12thông qua cổng VPN 10.100.100.254.

Tìm hiểu thêm về điều này tại http://technet.microsoft.com/en-us/l Library / bb878117.aspx


1
"Bạn sẽ phải tự thêm tuyến đường" ... bằng cách nào? Làm thế nào để ai đó ép buộc, hãy nói, "192.168.10.123" để đi qua vpn, nhưng không có gì khác?
Timothy Khouri

16
Cá nhân, tôi thấy chỉ cần tắt hộp kiểm là đủ. Tôi không phải thêm bất kỳ tuyến đường nào. Tôi đã xác minh tất cả mọi thứ đang diễn ra ở nơi mà tôi mong đợi nó sẽ thông qua nhiều tracerts.
eidylon

1
Tương tự, hộp kiểm này là tất cả những gì cần thiết.
Luk

1
Vui lòng làm rõ. Lưu lượng nào được định tuyến qua VPN? Có phải nó chỉ là lưu lượng truy cập vào IP của máy chủ VPN? Ví dụ: nếu kết nối VPN chuyển đến "my.domain.com", thì điều đó có nghĩa là tất cả lưu lượng truy cập trên máy khách đến "my.domain.com" sẽ đi qua VPN và mọi thứ khác sẽ đi đến cổng mặc định?
Triynko

1
Tôi đã sử dụng lệnh "lộ trình in" và xác minh rằng các tuyến Windows 7 được tạo đã sai. Nó không gửi lưu lượng được gửi đến IP của VPN của tôi đến VPN ... thay vào đó, nó đã gửi nó đến cổng cục bộ của tôi. Ngoài ra còn có một vài mục tròn trong bảng. Tôi đã xóa tuyến đường Windows đã tạo, sau đó thêm thủ công tuyến đường chính xác để mục nhập địa chỉ IP của máy chủ VPN của tôi sẽ sử dụng cổng của VPN và IP cục bộ của máy khách cho giao diện. Lưu lượng truy cập đến máy chủ VPN của tôi sau đó đã được định tuyến thành công qua đường hầm VPN và tất cả lưu lượng truy cập khác không bị ảnh hưởng như mong đợi. Hoạt động tốt.
Triynko

20

Tôi đã sử dụng thành công kỹ thuật của @ TRS-80 để đạt được điều này.

Tôi làm việc tại nhà và phải VPN vào mạng công ty cho email của mình (tôi ghét webmail !!).

Đồng thời, tôi cần phải liên tục lướt tìm thông tin và cũng cần youtube cho nhạc nền của mình ... Bây giờ bạn chắc chắn không muốn phát trực tuyến youtube khỏi VPN vì điều đó nghe giống như tiếng hát của Robot !!! :)

Tất cả những gì tôi đã làm là theo dõi @ TRS-80:

thuộc tính của VPN, tab Mạng, thuộc tính "Giao thức Internet (TCP / IP)", Nâng cao, bỏ chọn "Sử dụng cổng mặc định trên mạng từ xa"

và sau đó đã làm của riêng tôi:

trong tab DNS, đánh dấu vào "đăng ký địa chỉ kết nối này trong DNS"

Tất cả hoạt động liền mạch!


9

Cấp câu trả lời này không phản ánh yêu cầu của bạn nhưng tôi sử dụng VM đặc biệt cho mục đích này. Theo cách đó, chỉ có mạng bên trong VM bị hạn chế bởi các tuyến.

Bạn có thể tìm thấy một số câu trả lời tốt hơn bởi những người khác nhưng ít nhất điều này có thể cung cấp cho bạn một cái gì đó để xem xét vì đây là một giải pháp dễ dàng sau khi VM được tạo.


Đây là một giải pháp tốt với điều kiện phần cứng của bạn có thể xử lý tốt.
Bí tích

Sử dụng giải pháp này trong nhiều năm, cho đến khi tìm thấy chủ đề này. :)
ov

7

Tôi thấy rằng nó cần phải trực tiếp trỏ giao diện trong lệnh tuyến đường. Không có nó, Windows sẽ sử dụng giao diện card mạng chính, thay vì VPN. Trong trường hợp của tôi, nó trông giống như

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

lưu ý 'NẾU 26'.


Cái này cũng có tác dụng với tôi. Để tìm ra giao diện nào bạn cần chỉ cần thực hiện lệnh "lộ trình in" và kiểm tra các dòng đầu tiên hiển thị danh sách các giao diện có sẵn (tìm VPN của bạn ở đó và kiểm tra IF của nó - nó sẽ ở cột đầu tiên).
Funbit

Có một bài viết tuyệt vời về điều này: liên kết . Sử dụng 0.0.0.0 làm IP cổng mặc định dường như cũng hoạt động tốt, do đó không cần điều chỉnh khi thay đổi. Sẽ thật tuyệt khi kết hợp trong câu trả lời này, vì imo nó hữu ích hơn nhiều so với câu trả lời hàng đầu.
lpd

5

Sử dụng lệnh ghép ngắn Add-VpnConnectionRoute trong Windows 8+.

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

Điều này hoạt động hoàn hảo với tôi trên Windows 10.
x-quang

4

nếu bạn có cả IPV4 và IPV6, bạn phải bỏ chọn "Sử dụng cổng mặc định trên mạng từ xa" ở cả hai nơi, ngay cả khi bạn chỉ sử dụng IPV4


3

Nếu bạn sử dụng CMAK và thiết lập tệp định tuyến mà khách hàng có thể tải xuống ... windows sẽ tải xuống tệp định tuyến & điều chỉnh các tuyến đường phù hợp. Có các tùy chọn để xóa tuyến đường mặc định ... và thêm các tuyến tĩnh khác nhau và như vậy. Điều này được gọi là btw đường hầm phân chia.

Có một cách tốt để làm ở đây: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-USE-cmak.aspx


2

Tôi muốn thêm giải pháp của tôi vào hỗn hợp. Nó chạy trên hệ vỏ UNIX do Cygwin cung cấp trên Windows 7 hoặc mới hơn nhưng cũng sẽ hoạt động với MSYS2, Bash-on-Windows [WSL] sau khi xây dựng 14986 hoặc Busybox cho Windows). Cần phải được chạy với đặc quyền quản trị viên.

Nó có một số cài đặt và cố gắng phát hiện một số điều bạn không đặt rõ ràng. Nó cũng đặt số giao diện (IF) một cách rõ ràng để chống lại một số vấn đề mà một số người dùng (như tôi) gặp phải với các giải pháp khác ở đây.

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

Cũng cần lưu ý rằng có thể cần phải đặt thủ công một số liệu thấp hoặc nếu không thì tuyến mặc định sẽ khớp trước khi lưu lượng truy cập dành cho VPN. Bạn thực hiện việc này bằng cách đi tới cài đặt bộ điều hợp nơi bạn mở mục trình đơn "Thuộc tính" cho bộ điều hợp VPN → tab "Mạng""Giao thức Internet Phiên bản 4 (TCP / IP)" Thuộc tính → "Nâng cao" → và ở đó bạn bỏ chọn các "Automatic metric" hộp kiểm (ngoài các "Sử dụng cổng mặc định ..." tất nhiên) và thiết lập giá trị trong "Giao diện số liệu:" lĩnh vực đến một giá trị thấp hơn so với các tuyến đường mặc định (xem ROUTE.EXE -4 printra).


1

Một chút cũ nhưng tôi tìm thấy một cách để làm điều này bằng cách sử dụng một máy khác. Tôi có một máy tính xách tay nơi tôi thiết lập kết nối VPN và trên đó tôi có FreeProxy được thiết lập với Vớ5 ..

Sau đó, tôi đã thiết lập firefox trên máy khách của mình để sử dụng máy chủ proxy của máy tính xách tay .. kết quả là nếu tôi sử dụng FireFox hoặc bất cứ thứ gì được thiết lập để sử dụng proxy Vớ5 đó, nó sẽ sử dụng VPN, nếu không, nó sẽ sử dụng định tuyến chuẩn ..


1

Bạn có thể sử dụng một cái gì đó như netcatcher - chỉ cần thêm tất cả các tuyến bạn cần một lần và quên nó. Nó sẽ tự động thêm và xóa các tuyến đường khi bạn kết nối hoặc ngắt kết nối phiên VPN của bạn. Nếu địa chỉ IP VPN của bạn được lấy tự động (DHCP), netcatcher sẽ bắt nó và cập nhật các tuyến đường đúng cách.


2
nếu đây là thứ bạn đã viết, bạn cần tiết lộ rằng anseko.com/about.html xem faq
Jeff Atwood

1

từ diễn đàn Nga: http://forum.ixbt.com/topic.cgi?id=14:43549

lưu dưới dạng tệp (ví dụ: vpn_route.vbs) và sau khi vpn kết nối lệnh thực thi

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

Điều này không thể được thực hiện trong Windows mà không sử dụng các chương trình bổ sung, tệp bó hoặc dòng lệnh. Một cách khác là lấy một máy ảo (hoặc vật lý) mà bạn có thể chạy VPN trên đó.

Có vẻ lạ khi một cái gì đó dễ giải thích như điều này rất khó để đạt được. Việc định tuyến lưu lượng truy cập từ một chương trình đến giao diện VPN và tất cả các chương trình khác đến giao diện NIC mặc định có khó khăn đến mức nào? Tại sao chúng ta cần phải thiết lập toàn bộ máy ảo cho điều đó? Và với Linux thì có thể nhưng giải pháp của nó cũng không thanh lịch lắm.

Nó cũng được tìm kiếm rất nhiều: Tôi đã tìm thấy hàng tá chủ đề về cùng một chủ đề. Vì vậy, tôi chỉ hy vọng ai đó nhận ra sự lố bịch của việc này và làm điều gì đó về nó. (Trong Windows 8!)

Giải pháp này là từ một tệp bó không phân bổ . Nó đã được điều chỉnh một chút.

Hướng dẫn cho Windows 7

Tập lệnh sẽ kết nối và định tuyến lưu lượng truy cập thông qua VPN của bạn cho đến khi khởi động lại - bạn có thể thay thế route addbằng route -p addthay đổi để duy trì, nhưng nếu bạn không có IP liên tục với VPN, cuối cùng nó sẽ ngừng hoạt động khi IP VPN của bạn thay đổi.

  1. Mở Trung tâm Mạng và Chia sẻ
  2. Mở các thuộc tính cho kết nối VPN của bạn
  3. Nhấp vào Networkingtab
  4. Đối với cả IPv4 và 6:
    1. Nhấp chuột Properties
    2. Nhấp chuột Advanced
    3. Bỏ chọn Use default gateway[...]
  5. Đóng mọi thứ đã mở từ các bước trước
  6. Chỉnh sửa và lưu tập lệnh được tìm thấy bên dưới
  7. Chạy nó như một quản trị viên

Bạn cần thay thế các phần sau trong tập lệnh:

  • <VPN> với Tên của kết nối VPN mà bạn đã tạo
  • <USER> với tên người dùng VPN
  • <PASS> với mật khẩu VPN
  • <TARGET> với địa chỉ IP bạn muốn định tuyến qua VPN (nếu bạn muốn định tuyến nhiều địa chỉ hơn, chỉ cần sao chép ba dòng nơi mục tiêu được sử dụng)

Lưu ý: Nếu bạn không muốn lưu mật khẩu trong tập tin, thay thế <PASS>với %password%và thêm những điều sau đây sau khi dòng đầu tiên của kịch bản: set password= Input password:.

Kịch bản

@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

Hướng dẫn "ngắn" cho những người mới như tôi, người không biết nhiều về mạng. Không có nhiều mới ở đây, nhưng một bản tóm tắt của tất cả các tùy chọn tốt được mô tả trong các câu trả lời trước và trong các chủ đề liên quan khác. Toàn bộ thủ tục bao gồm 3 bước cơ bản:

1) Thực hiện tất cả lưu lượng KHÔNG đi qua VPN. Đối với điều này, bạn phải bỏ chọn Use default gateway on remote networkhộp kiểm trong cài đặt VPN. Đảm bảo bỏ chọn hộp kiểm này cho cả IPv4 và IPv6. Thông thường tôi chỉ đơn giản là vô hiệu hóa hoàn toàn giao thức IPv6 cho kết nối VPN.

(!) (Đôi khi) có thể bỏ chọn hộp kiểm đó là đủ cho công việc bình thường - theo kinh nghiệm của tôi, các tuyến cần thiết (sẽ điều hướng lưu lượng truy cập cần thiết qua VPN) có thể được thêm tự động sau khi kết nối VPN được thiết lập. Tôi không biết chính xác vị trí và cách thức các quy tắc này được cấu hình, nhưng kịch bản như vậy tồn tại - có lẽ đó là một số phép thuật được thực hiện bởi các quản trị viên mạng VPN.

2) Chỉ thực hiện lưu lượng cần thiết đi qua VPN. Đối với điều này, bạn cần xác định tuyến đường. Ở đây bạn có 3 tùy chọn:

2.1) Thêm tuyến cố định qua cổng VPN:

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

trong đó 'VPN gateway' = 'IP của bạn trên mạng VPN' = w.x.y.zvà địa chỉ đích / mạng = a.b.c.d. Bạn có thể tìm thấy w.x.y.zbằng cách thực thi ipconfigvà tìm kiếm tên kết nối VPN của mình hoặc, nếu bạn sử dụng PowerShell, bạn có thể nhận được đầu ra nhỏ gọn bằng cách thực thi ipconfig | grep -A5 PPP(sẽ xuất ra 5 dòng sau khi tìm thấy mỗi kết nối PPP).

Nhược điểm: bạn sẽ phải tạo lại các tuyến nếu IP VPN của bạn sẽ thay đổi.

2.2) Thêm tuyến cố định qua giao diện mạng VPN:

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

nơi a.b.c.dlà địa chỉ mục tiêu / mạng và interface numberlà định danh của kết nối VPN của bạn. ID này có thể được tìm thấy bằng cách thực thi netstat -rn, hoặc, cho đầu ra nhỏ gọn hơn , netstat -rn | grep -A10 'Interface List'.

Ưu điểm: không cần thay đổi bất cứ điều gì nếu địa chỉ VPN của bạn ( w.x.y.z) sẽ thay đổi.

Nhược điểm: cần tạo lại các tuyến đường với ID mới nếu bạn xóa kết nối VPN của mình.

2.3) Sử dụng lệnh ghép ngắn PowerShell:

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

Ưu điểm: các tuyến cần thiết được thêm vào mỗi lần kết nối VPN được thiết lập và xóa mỗi lần ngắt kết nối.

Nhược điểm: không có Get-VpnConnectionRoutescmdlet nên có thể khó quản lý các quy tắc này.

3) Kiểm tra và đảm bảo định tuyến hoạt động như mong đợi!

Nếu bạn đã thêm các tuyến liên tục, bạn có thể kiểm tra chúng bằng cách thực hiện netstat -rn | grep -A10 'Persistent Routes'.

Và cuối cùng, chạy một số tracertlệnh đối với cả hai địa chỉ IP được cho là được truy cập qua VPN và chống lại những địa chỉ nên hoạt động mà không cần VPN.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.