it-swarm-ko.com

Windows VPN 경로 선택 트래픽을 대상 네트워크별로 어떻게 만들 수 있습니까?

Windows VPN을 사용하고 싶지만 특정 네트워크에만 사용하기 때문에 전체 네트워크 연결을 차지하지 않습니다.

예를 들어 VPN이 기본 경로가되는 대신 192.168.123.0/24의 경로만으로 설정하십시오.

(나는이 질문에 우분투 를위한 해결책이 있다는 것을 알 수 있지만 , 때로는 윈도우에서도 그렇게해야한다)

VPN에 연결할 때마다 자동으로이 작업을 수행 할 수 있습니까?

136
Legooolas

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

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

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

이 예에서는 VPN 게이트웨이 192.168.0.12를 통해 IP 10.100.100.254에 대한 지속적인 라우팅을 수행합니다 (재부팅 후 명령을 실행할 필요는 없습니다).

자세한 내용은 http://technet.Microsoft.com/en-us/library/bb878117.aspx

136
TRS-80

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

나는 집에서 일하고 내 이메일 (회사 웹 메일이 싫다.)을 위해 회사 네트워크에 VPN을 연결해야한다.

동시에, 나는 정보를 위해 끊임없이 서핑을하고 또한 나의 배경 음악을 위해 youtube를 필요로 할 필요가있다. .. 지금 그것이 당신이 확실히 VPN에서 유튜브를 스트리밍하기를 원하지 않는다. :)

내가 한 모든 것은 @ TRS-80을 따랐다 :

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

그리고 나 자신을했다 :

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

'IF 26'을 주목하십시오.

7
Dmitry Petrov

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

4
Dave

CMAK를 사용하고 클라이언트가 다운로드 할 수있는 라우팅 파일을 설정하면 ... 창에서 라우팅 파일을 다운로드하고 적절하게 경로를 조정합니다. 기본 라우트를 제거하고 다양한 정적 라우트를 추가하는 옵션이 있습니다. 이것은 분할 터널 btw로 알려져 있습니다.

여기에 좋은 방법이 있습니다. http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

내 솔루션을 믹스에 추가하고 싶습니다. Windows 7의 Cygwin 기반 UNIX 셸에서 실행되지만, MSYS2, Bash-on-Windows [WSL] (14986 빌드 이후 또는 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 어댑터의"... Properties"메뉴 항목을 여는 어댑터 설정 →"Networking"tab →"인터넷 프로토콜 버전 4 (TCP/IP)"Properties →"고급"→ 그리고 거기에서"자동 메트릭"체크 박스 ("Use default gateway ..."/ 물론)"인터페이스 메트릭 :"필드의 값을 기본 경로보다 낮은 값으로 설정하십시오 (ROUTE.EXE -4 print 출력 참조).

2
phk

Windows 8 이상에서는 Add-VpnConnectionRoute cmdlet을 사용하십시오.

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

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

1
Andy

러시아 포럼 : http://forum.ixbt.com/topic.cgi?id=14 : 43549

파일로 저장 (예 : vpn_route.vbs) 및 vpn connected execute 명령 후

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 연결을 설정하고 거기에 Socks5로 FreeProxy를 설정 한 노트북을 가지고있다.

그런 다음 파이어 폭스를 클라이언트 컴퓨터에 설치하여 랩톱의 프록시 서버를 사용합니다. 파이어 폭스를 사용하거나 Socks5 프록시를 사용하도록 설정 한 경우 VPN을 사용합니다. 그렇지 않으면 표준 라우팅을 사용합니다.

1
Lonnie

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

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

너무 많이 찾았습니다. 같은 주제에 대해 수십 개의 실을 발견했습니다. 그래서 저는 누군가가 이것에 대한 우스꽝 스러움을 깨닫고 그것에 대해 뭔가를하기를 바랍니다. (윈도우 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>
  • VPN 사용자 이름으로 <USER>
  • <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
1
Xantippe

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

1) ( 모두 트래픽이 VPN을 통과하지 않도록하십시오.이를 위해서는 VPN 설정에서 Use default gateway on remote network 확인란을 선택 해제해야합니다. 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 게이트웨이'= 'VPN 네트워크의 IP'= w.x.y.z 및 대상 주소/네트워크 = a.b.c.d. ipconfig을 (를) 실행하고 VPN 연결 이름을 찾아 w.x.y.z를 찾거나 PowerShell을 사용하는 경우 ipconfig | grep -A5 PPP (각 항목을 찾은 후 5 줄을 출력 함)을 실행하여 간단한 출력을 얻을 수 있습니다. PPP 연결).

단점 : 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-VpnConnectionRoutes cmdlet이 없으므로 이러한 규칙을 관리하기가 어려울 수 있습니다.

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

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

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

0
o.v