선택한 애플리케이션에 대해서만 VPN 연결을 사용하십시오.


39

VPN에 액세스 할 수 있으며 일부 응용 프로그램에만 사용하고 싶지는 않습니다.

예를 들어
VPN에 연결하면 Opera 및 Newsbin 응용 프로그램 만 해당 VPN 연결을 사용하기를 원합니다. fe와 같은 다른 모든 응용 프로그램은 정상적인 인터넷 연결을 사용해야합니다 (VPN이 연결되어 있거나 열려있는 동안).

Afaik 이것은 가능하지 않지만 완전히 확신 할 수는 없습니다. 따라서 내 질문 : 가능합니까?


답변:


-1

아닙니다. 정상적인 수단을 사용하지 않는 것이 좋습니다. 라우팅이 라우팅 중입니다. 라우팅은 OSI 모델에서 아래로 작동합니다. 당신이해야 할 일은 응용 프로그램 수준 (상위)에서 인식하여 사용중인 프로그램 등을 감지 할 수 있다는 것입니다. NORMAL 라우터는 응용 프로그램이나 포트 번호를 기반으로 경로를 구성 할 수 없습니다.

그래도 가능하다고 생각합니다. 라우터는 포트를 볼 수 있으므로 포트 번호로 필터링하여 트래픽을 다른 경로로 보낼 수 있습니다. 나는 이것을 할 수있는 Cisco 라우터로 얼마 전에 무언가를 읽었을 것이라고 확신합니다. 그들은 싸게 오지 않으며 많은 구성이 필요한 비즈니스 라우터이며 가정용으로 간단한 것을 원한다고 생각합니다.

요약하자면,이 기능이 필요한 라우터와 가정에서 사용하는 늪지 표준 기능이며, 기업에서도 이러한 기능을 지원하지 않습니다. Cisco와 Sonicwall의 고급 라인 만이 이러한 기능을 제공합니다.


36

적어도 Linux 에서이 작업을 수행 할 수 있습니다 (BSD 및 OS X에서도 생각하고 있습니다). 당신은 그렇게 할 수 있습니다 :

  • 모든 VPN 트래픽에 대해 exra 사용자를 작성하십시오.
  • VPN을 통해 기본 경로가 1 개인 추가 라우팅 테이블을 만듭니다.
  • 특정 사용자 ID에서 발생하는 모든 트래픽에 대해 다른 라우팅 테이블을 사용하도록 IPtables를 통해 Netfilter를 구성하십시오.
  • 자신의 사용자로 VPN을 사용해야하는 응용 프로그램을 실행하십시오. 예를 들어 'sudo'가 있습니다.

위의 단계를 수행하기위한 스크립트가 여기 있거나 다른 안내서가 있습니다 .

다음은 VPN을 통한 전송 라우팅 (자신의 VPN 서버 사용 )에 대한 자세한 안내서 입니다.


Linux에서 훨씬 더 쉬움 : 네트워크 네임 스페이스를 만들고 VPN을 해당 네임 스페이스에 연결하고 VPN에서 네임 스페이스를 사용해야하는 응용 프로그램을 실행하십시오. VPN을 사용하는 것과 직접 연결을 사용하는 것 같은 동일한 응용 프로그램의 사본 두 개를 실행할 수도 있습니다.
dirkt

15

Windows 방화벽을 사용하여이 작업을 수행 할 수 있습니다 (Win 7 또는 Vista를 사용하는 경우). 이에 대한 안내서를 작성했습니다.

  1. 평소처럼 VPN에 연결하십시오.

  2. 네트워크 및 공유 센터를 열고 작업 표시 줄에서 인터넷 연결 아이콘을 마우스 오른쪽 버튼으로 클릭하고 "네트워크 및 공유 센터 열기"를 선택하십시오 (아래 참조).

  3. "연결된 네트워크보기"아래에 두 개의 네트워크 (VPN 연결 및 "네트워크"라고도 함)가 ISP 연결이라고 표시되어 있습니다. VPN이 "공용 네트워크"이고 ISP 연결이 "홈 네트워크"인지 확인하십시오. 연결을 변경해야 할 경우 연결을 클릭하면 옵션 창이 나타납니다 (아래 참조).

  4. 제어판으로 이동하여 시스템 및 보안을 클릭하십시오 (아래 참조).

  5. 결과 창에서 Windows 방화벽을 클릭하십시오 (아래 참조).

  6. Windows 방화벽 창의 왼쪽 창에서 고급 설정을 클릭하십시오 (아래 참조). 참고 : 방화벽 설정을 변경하려면 관리자로 로그인해야합니다.

  7. 고급 보안 기능을 가진 Windows 방화벽이라는 제목의 창이 나타납니다. 이 창에서 인바운드 규칙을 클릭하십시오 (아래 참조).

  8. 오른쪽 창에 새 규칙에 대한 옵션이 표시됩니다. 클릭하십시오 (아래 참조).

  9. 새 인바운드 규칙 마법사 (표시되어야 함)에서 다음을 수행하십시오.

    • 프로그램을 선택하고 다음을 클릭하십시오.

    • VPN 연결을 제외한 모든 트래픽을 차단하려는 프로그램을 선택하고 다음을 클릭하십시오.

    • 연결 차단을 선택하십시오.

    • 틱 도메인 및 개인. 공개가 해제되어 있는지 확인하십시오.

  10. 아웃 바운드 규칙에 대해 9 단계를 반복하십시오.


11
이것이 실제로 질문에 대답합니까? 예, VPN이 아닌 경우 앱이 작동하지 않지만 모든 트래픽이 여전히 VPN을 통과하지 않습니까?
Jason Coyne

3
@pramble 모든 트래픽이 여전히 VPN을 통과합니까?
nsij22

작동하는 것 같습니다. 방금 테스트했습니다 ..
Faiz

이것은 해결되지 않습니다. 이것은 매우 간단한 시나리오입니다. 모든 작업 관련 항목이 VPN (SQL Server 연결, Slack 등)을 거치고 싶지만 웹 브라우저 (Facebook, Soundcloud 등 기본적으로 모든 포트 80 트래픽)가 VPN을 통과하지 않기를 원합니다. . 이것이 가능하지 않으면 Windows가 짜증납니다.
Triynko

@Triynko 귀하의 시나리오는 OP가 요청한 시나리오와 다릅니다. VPN에 연결 한 후 작업 관련 항목에 해당 경로를 설정하기 만하면됩니다. 즉, 모든 작업 관련 서브넷 또는 IP에 VPN 게이트웨이를 사용합니다. 특정 응용 프로그램에서 발생하는 라우팅 트래픽은 달성하기가 더 어렵습니다.
말하기

4

GNU / Linux에서 네트워크 네임 스페이스를 사용하여이를 수행 할 수 있습니다.

별도의 네임 스페이스에서 OpenVPN과 단일 응용 프로그램을 실행하는 방법은 다음과 같습니다.

net 네트워크 네임 스페이스를 만듭니다.

ip netns add myvpn

네임 스페이스에서 루프백 인터페이스를 시작하십시오 (그렇지 않으면 많은 것들이 예상대로 작동하지 않습니다…)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

네임 스페이스에서 OpenVPN이 실제 네트워크에 액세스 할 수 있도록 가상 네트워크 인터페이스를 만들고 네임 스페이스 (vpn0)의 인터페이스를 기본 게이트웨이로 사용하도록 네임 스페이스 (vpn1)의 인터페이스를 구성합니다.

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

네임 스페이스에서 인터페이스에 IPv4 라우팅 및 NAT를 활성화합니다. 내 기본 인터페이스는 무선 인터페이스이므로 나가는 인터페이스의 iptables에서 wl + (wlan0, wlp3s0 등과 일치 할 수 있음)를 사용합니다. 유선 인터페이스를 사용하는 경우 en + (또는 브리지 된 인터페이스의 경우 br +)를 사용해야합니다.

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

네임 스페이스 내에서 사용할 네임 서버 구성

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

거의 끝났으니 이제 네임 스페이스에서 완전한 네트워크 액세스가 가능해야합니다

ip netns exec myvpn ping www.google.com

마지막으로 네임 스페이스에서 OpenVPN을 시작하십시오.

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

네임 스페이스에 tun0이 설치되면 원하는 프로그램을 시작할 수 있습니다!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime

소스 기사.

또한 소스 기사에는 필요에 맞게 조정할 수있는 래퍼 스크립트가 있습니다.


3

Windows 에서이 작업을 수행했습니다. 나가는 네트워크 패키지를 VPN의 인터페이스에 바인딩하는 것이 좋습니다. 사람들은 이것에 대해 ForceBindIP 를 제안 하지만 이 답변 덕분에 프록시를 사용할 아이디어가 있습니다. 이 방법의 단점은 앱에서 프록시를 지원해야하거나 프록시를 사용해야한다는 것입니다 ( 여기여기 참조 ). 단점은 브라우저에서 VPN 사용을 FoxyProxy 또는 유사한 애드온을 사용하는 특정 도메인으로 제한 할 수 있다는 것입니다.

SOCKS 모드에서 3proxy 를 사용 하고 외부 인터페이스를 VPN의 IP에 바인딩합니다. OpenVPN은 VPN 연결에 사용됩니다.

내 .ovpn 파일 ( client, dev tun)에 다음 줄을 추가했습니다.

route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'

route-nopull서버에서 푸시 된 경로를 무시합니다. 귀하의 경우 리디렉션 게이트웨이를 주석 처리해야 할 수도 있습니다.

route 이 인터페이스에 대한 경로를 추가하려면이 줄이 없으면 앱이 바인딩되어 있어도 사용되지 않습니다.

pull-filter그렇지 않으면 route-nopull푸시 된 경로와 함께 삭제되는 푸시 된 DNS를 유지 합니다. 이 옵션은 OpenVPN 2.4부터 지원되며 OpenVPN 2.3 (Windows XP 용 최신 릴리스)을 사용해야 dhcp-option DNS x.x.x.x하는 경우 하드 코드 된 IP가있는 두 줄을 대신 추가해야합니다 .

script-security 2 스크립팅을 허용합니다.

up 스크립트:

cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf

down 스크립트:

taskkill /f /im 3proxy.exe

따라서이 구성을 사용하여 VPN에 연결하면 3proxy.exe프로세스가 시작되고 DNS 확인 기능이있는 로컬 호스트 제한 SOCKS5 프록시가 1080포트에서 실행됩니다. 이제 localhost:1080SOCKS 프록시 를 사용하도록 앱을 구성하면됩니다 .


나는 무엇입니까 Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]). 덜,이 솔루션은 작동합니다. down 및 up 스크립트에 대한 아포스트로피를 건너 뛰면 이중 백 슬래시를 사용하십시오.c:\\path\\to\\script
chx

1

Linux를 사용 중이고 openVPN을 사용하는 경우 VPNShift 가 아름답게 작동합니다.


여러 질문에 동일한 답변을 게시하지 마십시오. 동일한 정보가 실제로 두 질문에 모두 대답하는 경우 한 질문 (보통 새로운 질문)은 다른 질문과 중복하여 닫아야합니다. 다음과 같은 방법으로이를 표시 할 수 있습니다 중복으로 닫 투표 또는, 당신이 충분한 명성을하지 않은 경우, 플래그 인상 이 중복의 것을 나타냅니다. 그렇지 않으면이 질문에 대한 답을 맞추고 동일한 대답을 여러 곳에 붙여 넣지 마십시오.
DavidPostill

4
그것이 "여러 질문에 대한 동일한 대답" 이라는 사실이 매우 중요합니까? 질문은 존재하지만 (아직) 중복으로 표시되지 않았으며 좋은 대답이므로 존재해야합니다. 감사합니다 @thouliha 🙂.
Ronan Jouchet

0

가상 머신을 통해 VPN에 액세스하십시오.

  1. VM을 만든 다음 VM 내부에서 ...
  2. '선택된'응용 프로그램 설치
  3. VPN 구성

호스트 시스템에서 사용하는 대신 VM에서 '선택된'애플리케이션을 사용하십시오.

PS 물론 호스트 시스템을 통해 VM에 네트워크 액세스 권한을 부여해야합니다.


이것은 다른 답변에 이미 자세히 설명 된 접근법을 언급합니다.
fixer1234

1
@ fixer1234 : 아무도 가상 머신을 언급하지 않았습니다.
drowa

답변을보다 실행 가능한 것으로 확장 할 수 있습니까 (방법 설명). 세부 수준에 대한 아이디어는 스레드의 다른 답변을 참조하십시오. 추구 할 방향에 대한 힌트를 제공하는 것만으로도 의견을 제시 할 수 있습니다.
fixer1234

먼저 의견을 시도했지만 50 점 미만이므로 시스템에서 허용하지 않았습니다. 그런 다음 답을 확장하려고 노력할 것입니다.
drowa

이것이 내가 생각한 아이디어이며 sysadmin 측에서 복잡한 라우팅 구성없이 정상적으로 작동합니다.
pwned

0

나는 이것이 방금 뛰어 다니는 답이 늦다는 것을 알고 있지만 누군가와 관련이있는 경우 VPN을 통해 작업 트래픽을 실행하고 싶었지만 개인 트래픽을 통해 라우팅하지 않으려는 것과 같은 상황이있었습니다. 프록시 서버 등. 그래서 당시에는 Win7을 실행했지만 많은 시스템에서 여전히 WinXP를 실행하고있었습니다. 결국 그들은 문제를 해결하는 작업을 위해 두 번째 PC를 제공했습니다 (두 PC에 연결된 스위치 박스가 앞뒤로 움직일 수 있음).이 전에 나는 내 작업 OS로 설정 한 Virtual XP를 실행했습니다. 나는 VM에서 VPN을 사용하여 작업에 연결하여 개인 OS 트래픽에 작업 제한 및 감시가 없도록 할 것입니다.

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