Windows VPN 라우트 선택적 트래픽 (대상 네트워크 별)을 어떻게 만들 수 있습니까?


139

Windows VPN을 사용하고 싶지만 특정 네트워크에만 사용하므로 전체 네트워크 연결을 인계받지 않습니다.

예를 들어 VPN이 기본 경로가되는 대신 192.168.123.0/24의 경로 만 만듭니다.

( 이 질문 에 우분투 대한 해결책이 있음을 알 수 있지만 때로는 Windows 에서도이 작업을 수행해야합니다)

VPN에 연결할 때마다이를 수행하도록 자동화 할 수 있습니까?


VPN을 통해 많은 사이트를 필터링하는 것과 관련된 질문이 있습니까? 여기에 답변은 VPN 뒤에 단일 사이트가있는 경우에만 작동하는 것 같습니다. 나는 중국에 있는데 내가 사용하려는 사이트의 약 절반이 차단되어 VPN을 통과해야하지만 VPN이 없으면 다른 사이트가 더 빠릅니다.
hippietrail

나는 계속해서 새로운 질문을했다 : superuser.com/questions/925947
hippietrail 3

답변:


139

VPN, Networking탭, Internet Protocol (TCP/IP)속성 Advanced,, ickick 속성 으로 이동하여 전체 연결을 인계 할 수 있습니다 Use default gateway on remote network. 192.168.123.0/24VPN 서버의 설정에 따라 경로를 떠나거나 떠나지 않을 수 있습니다 . 그렇지 않은 경우 배치 파일에 넣을 수 있지만 매번 경로를 수동으로 추가해야합니다.

경로를 수동으로 추가하려면 관리자 권한으로 다음을 실행하십시오.

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

이 예제는 192.168.0.12VPN 게이트웨이를 통해 IP로 지속적 (재부팅 후 명령을 실행할 필요가 없음) 경로를 10.100.100.254만듭니다.

이에 대한 자세한 내용은 http://technet.microsoft.com/en-us/library/bb878117.aspx를 참조하십시오.


1
"경로를 수동으로 추가해야합니다"... 어떻게? 어떻게 "192.168.10.123"이 VPN을 통과하도록 강요합니까?
Timothy Khouri 2016 년

16
개인적으로, 나는 단지 체크 박스를 끄는 것으로 충분하다는 것을 알았습니다. 경로를 추가 할 필요가 없었습니다. 나는 수많은 추적을 통해 모든 것이 진행되고 있음을 확인했다.
eidylon

1
마찬가지로이 확인란 만 있으면됩니다.
Luk

1
명확히하십시오. 어떤 트래픽이 VPN을 통해 라우팅됩니까? VPN 서버의 IP를 대상으로하는 트래픽입니까? 예를 들어, VPN 연결이 "my.domain.com"으로 이동하면 클라이언트의 "my.domain.com"에 대한 모든 트래픽이 VPN을 통과하고 다른 모든 것이 기본 게이트웨이로 이동한다는 의미입니까?
Triynko

1
"route print"명령을 사용하여 Windows 7에서 생성 된 경로가 잘못되었음을 확인했습니다. VPN의 IP 주소로 지정된 트래픽을 VPN으로 전송하지 않고 ... 대신 로컬 게이트웨이로 전송했습니다. 표에는 몇 개의 원형 항목도있었습니다. Windows에서 만든 경로를 삭제 한 다음 VPN 서버의 IP 주소 항목이 인터페이스의 VPN 게이트웨이와 클라이언트의 로컬 IP를 사용하도록 올바른 경로를 수동으로 추가했습니다. 그런 다음 VPN 서버로의 트래픽이 VPN 터널을 통해 성공적으로 라우팅되었으며 다른 모든 트래픽은 예상대로 영향을받지 않았습니다. 잘 작동합니다.
Triynko

20

나는 이것을 달성하기 위해 @ TRS-80 의 기술을 성공적으로 사용했다 .

집에서 일을하고 회사 네트워크에 VPN을 써야 이메일을받을 수 있습니다 (웹 메일이 싫습니다 !!).

동시에, 나는 정보를 위해 끊임없이 서핑하고 배경 음악을 위해 유튜브가 필요합니다 ... 이제 당신은 로봇 노래처럼 들리기 때문에 VPN에서 유튜브를 스트리밍하고 싶지 않습니다! :)

내가 한 것은 @ TRS-80을 따르는 것입니다.

VPN의 속성, 네트워킹 탭, "인터넷 프로토콜 (TCP / IP)"속성, 고급, "원격 네트워크에서 기본 게이트웨이 사용"

그리고 내 자신을했다 :

DNS 탭에서 "DNS에이 연결 주소 등록"을 선택하십시오.

모든 것이 완벽하게 작동합니다!


9

이 답변에 귀하의 요청이 반영되지는 않지만이 목적을 위해 특별히 VM을 사용합니다. 그렇게하면 VM 내부의 네트워크 만 경로에 의해 제한됩니다.

다른 사람들이 더 나은 답변을 찾을 수는 있지만 VM을 만든 후에는 쉬운 해결책으로 고려해야 할 사항이 있습니다.


하드웨어가 잘 처리 할 수 ​​있다면 좋은 솔루션입니다.
Enigma

이 스레드를 찾을 때까지 수년간이 솔루션을 사용했습니다. :)
ov

7

route 명령에서 인터페이스를 직접 가리켜 야한다는 것을 알았습니다. 이것이 없으면 Windows는 VPN 대신 기본 네트워크 카드 인터페이스를 사용합니다. 제 경우에는 다음과 같습니다

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

'IF 26'에 유의하십시오.


이것은 나를 위해 일했다. 어떤 인터페이스가 필요한지 알아 보려면 "route print"명령을 실행하고 사용 가능한 인터페이스 목록을 표시하는 첫 번째 줄을 확인하십시오 (VPN을 찾아 IF를 확인하십시오-첫 번째 열에 있음).
Funbit

이것에 대한 훌륭한 기사가 있습니다 : link . 0.0.0.0을 기본 게이트웨이 IP로 사용하면 잘 작동하는 것 같으므로 변경시 조정할 필요가 없습니다. 이 답변에 포함시키는 것이 좋을 것입니다. 왜냐하면 imo는 상위 답변보다 훨씬 유용하기 때문입니다.
lpd


4

IPV4와 IPV6이 모두있는 경우 IPV4 만 사용하더라도 두 곳 모두에서 "원격 네트워크에서 기본 게이트웨이 사용"을 선택 취소해야합니다.



2

내 솔루션을 믹스에 추가하고 싶습니다. Windows 7 이상의 Cygwin 기반 UNIX 쉘에서 실행되지만 빌드 14986 후 MSYS2, Bash-on-Windows [WSL] 또는 Windows 용 Busybox 와도 작동해야합니다). 관리자 권한으로 실행해야합니다.

일부 설정이 있으며 명시 적으로 설정하지 않은 일부를 감지하려고 시도합니다. 또한 인터페이스 번호 (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 어댑터 의 "… 속성" 메뉴 항목 → "네트워킹" 탭 → "인터넷 프로토콜 버전 4 (TCP / IP)" 속성 → "고급" → 어댑터 설정으로 이동 하여 선택을 해제하면됩니다. "자동 메트릭" 합니다 (이외에 체크 박스 "기본 게이트웨이 사용 ..." 물론) 및 상기의 값 설정 : "인터페이스 메트릭" 기본 경로 (참조보다 낮은 값으로 필드를 ROUTE.EXE -4 print출력).


1

조금 오래되었지만 다른 컴퓨터를 사용 하여이 작업을 수행하는 방법을 찾았습니다. VPN 연결을 설정 한 랩톱이 있고 거기서 Socks5로 FreeProxy를 설정했습니다 ..

그런 다음 랩톱의 프록시 서버를 사용하도록 클라이언트 컴퓨터에 firefox를 설정했습니다. 그 결과 FireFox 또는 Socks5 프록시를 사용하도록 설정된 모든 항목이 VPN을 사용하고 그렇지 않으면 표준 라우팅을 사용합니다.


1

netcatcher 와 같은 것을 사용할 수 있습니다 . 한 번에 필요한 모든 경로를 추가하고 잊어 버리십시오. VPN 세션을 연결하거나 연결을 끊을 때 경로를 자동으로 추가 및 삭제합니다. VPN IP 주소가 동적으로 획득되면 (DHCP) netcatcher는이를 포착하여 경로를 올바르게 업데이트합니다.


2
이 일이 있다면 당신은 당신이 그 공개 할 필요가 쓴 anseko.com/about.html 참조 자주 묻는 질문
제프 앳 우드

1

러시아어 포럼 : 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

추가 프로그램, 배치 파일 또는 명령 줄을 사용하지 않으면 Windows에서이 작업을 수행 할 수 없습니다. 대안은 VPN을 실행할 수있는 가상 (또는 물리적) 머신을 얻는 것입니다.

이처럼 쉽게 설명 할 수있는 것이 달성하기 어렵다는 것이 이상하게 보입니다. 한 프로그램에서 VPN 인터페이스로, 다른 모든 프로그램을 기본 NIC 인터페이스로 트래픽을 라우팅하는 것이 얼마나 어려울 수 있습니까? 이를 위해 전체 가상 머신을 설정해야하는 이유는 무엇입니까? 그리고 리눅스에서는 가능하지만 그 해결책은 그리 우아하지 않습니다.

같은 주제에 대해 수십 개의 스레드를 발견했습니다. 그래서 나는 누군가가 이것의 어리 석음을 깨닫고 그것에 대해 무언가를하기를 바랍니다. (Windows 8에서!)

이 솔루션은 기여 하지 않은 배치 파일 에서 가져온 것 입니다. 약간 적응되었습니다.

Windows 7에 대한 지침

당신이 대체 할 수있다 - 스크립트는 다시 부팅 할 때까지 당신의 VPN을 통해 트래픽을 라우팅에 연결 route addroute -p add변화가 지속 할 수 있지만, 당신은 당신의 VPN과 영구적 인 IP가없는 경우, 결국 때 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> VPN을 통해 라우팅하려는 IP 주소를 사용하여 (더 많은 주소를 라우팅하려면 대상이 사용되는 세 줄을 복제하면됩니다)

참고 : 당신이 파일에 암호를 저장 교체하지 않으려면 <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

0

네트워크에 대해 잘 모르는 나와 같은 멍청한 놈들을위한 '짧은'안내서. 여기에 새로운 것은 아니지만 이전 답변과 다른 관련 스레드에서 설명한 모든 좋은 옵션에 대한 요약입니다. 전체 절차는 3 가지 기본 단계로 구성됩니다.

1) 모든 트래픽이 VPN을 통과하지 않도록하십시오. 이를 위해서는 Use default gateway on remote networkVPN 설정에서 확인란을 선택 취소해야합니다 . IPv4 및 IPv6 모두에 대해이 확인란의 선택을 취소하십시오. 일반적으로 VPN 연결을 위해 IPv6 프로토콜을 완전히 비활성화합니다.

(!) 확인란의 선택을 취소하면 정상적인 작업에 충분할 수 있습니다. VPN 연결이 설정된 후 필요한 경로 (VPN을 통해 필요한 트래픽을 전달할)가 자동으로 추가 될 수 있습니다. 이 규칙이 어디에서 어떻게 구성되어 있는지 정확히 알지 못하지만 그러한 시나리오가 존재합니다. 아마 VPN 네트워크 관리자가 수행하는 마술 일 것입니다.

2) 필요한 트래픽 만 VPN을 통해 전달하십시오. 이를 위해 경로를 정의해야합니다. 여기 3 가지 옵션이 있습니다 :

2.1) VPN 게이트웨이를 통한 영구 경로 추가 :

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

여기서 'VPN gateway'= 'VPN 네트워크상의 IP'= w.x.y.z및 대상 주소 / 네트워크 = a.b.c.d. 당신은 찾을 수 있습니다 w.x.y.z실행하여 ipconfig당신이 PowerShell을 사용하는 경우, 당신은 실행하여 컴팩트 한 출력을 얻을 수 있으며, VPN 연결 이름을 찾거나 ipconfig | grep -A5 PPP(이 출력됩니다 각 PPP 연결을 발견 한 후 5 선).

단점 : VPN IP가 변경되면 경로를 다시 만들어야합니다.

2.2) VPN 네트워크 인터페이스를 통한 영구 경로 추가 :

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

여기서 a.b.c.d대상 주소 / 네트워크 interface number는 VPN 연결의 식별자입니다. 이 ID는을 실행 netstat -rn하거나보다 컴팩트 한 출력을 위해 찾을 수 있습니다 netstat -rn | grep -A10 'Interface List'.

장점 : VPN 주소 ( w.x.y.z)가 변경 되면 아무 것도 변경할 필요가 없습니다 .

단점 : VPN 연결을 삭제하면 새 ID로 경로를 다시 만들어야합니다.

2.3) PowerShell cmdlet을 사용하십시오.

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

장점 : VPN 연결이 설정 될 때마다 필요한 경로가 추가되고 연결이 끊길 때마다 삭제됩니다.

단점 : Get-VpnConnectionRoutescmdlet 이 없으므로 이러한 규칙을 관리하기가 어려울 수 있습니다.

3) 라우팅이 예상대로 작동하는지 확인하고 확인하십시오!

영구 경로를 추가 한 경우을 실행하여 확인할 수 있습니다 netstat -rn | grep -A10 'Persistent Routes'.

마지막으로 tracertVPN을 통해 액세스해야하는 IP 주소와 VPN없이 작동해야하는 IP 주소에 대해 몇 가지 명령을 실행하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.