요약: VPN에 연결하고 특정 서버에 액세스하고 싶지만 다른 모든 트래픽에는 일반 네트워킹을 사용하고 싶습니다.
VPS에 OpenVPN 서버를 설정했는데 server.conf
파일은 다음과 같습니다.
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 4
push "route 10.132.0.0 255.255.0.0"
다음 .ovpn
파일을 사용하여 VPN 연결을 설정합니다.
client
dev tun
proto udp
remote <my.vpn.server.com> 1194
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>....</ca>
<cert>...</cert>
<key>...</key>
마지막으로 VPN 연결을 위한 네트워크 관리자의 IPv4 설정에서 "방법"을 "자동(VPN) 주소만"으로 설정했습니다.
VPN은 잘 연결되어 필요한 모든 내부 서버(10.132.xx)에 액세스할 수 있지만 다른 서버(예: google.com)에는 액세스할 수 없습니다. VPN을 통해 라우팅하려는 10.132.xx IP를 제외한 모든 항목에 내 eth0 설정을 사용하고 싶습니다.
no-pull
PS는 .ovpn 파일에서 사용하고 거기에 설정을 추가하려고 시도했지만 route
아무 소용이 없는 다른 기사를 기반으로 합니다.
편집 1:
VPN에 연결된 동안 ip a
실행 한 결과 :traceroute
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:dc:a6:ef brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
valid_lft 86320sec preferred_lft 86320sec
inet6 fe80::f3d1:6eb3:e13e:d61b/64 scope link
valid_lft forever preferred_lft forever
15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global tun0
valid_lft forever preferred_lft forever
$ traceroute google.com
google.com: Temporary failure in name resolution
Cannot handle "host" cmdline arg `google.com' on position 1 (argc 1)
편집 2: 결과ip r
$ ip r
default via 10.8.0.5 dev tun0 proto static metric 50
default via 10.0.2.2 dev eth0 proto static metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
10.8.0.1 via 10.8.0.5 dev tun0 proto static metric 50
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6 metric 50
10.132.0.0/16 via 10.8.0.5 dev tun0 proto static metric 50
104.236.239.153 via 10.0.2.2 dev eth0 proto static metric 100
169.254.0.0/16 dev eth0 scope link metric 1000
답변1
"네트워크의 리소스에만 이 연결을 사용하십시오.nm-connection-editor의 " 확인란은 NetworkManager가 VPN을 통해 기본 경로를 추가해야 하는지 여부를 제어합니다. 이 확인란을 선택하면 VPN 서브넷으로 전달되는 패킷만 VPN 게이트웨이를 통과하고 시스템은 기존 기본 경로를 사용합니다. 다른 목적지로 가는 경로.
nmcli를 사용하여 명령줄에서 동일한 설정을 변경할 수 있습니다.
nmcli connection modify <VPN connection> ipv4.never-default yes
답변2
클라이언트 GUI(Ubuntu NetworkManager)를 가지고 놀면서 원하는 효과를 얻을 수 있었습니다. IPv4 Settings -> Routes
"네트워크의 리소스에만 이 연결 사용" 확인란이 선택되어 있는지 확인해야 했습니다 .
이것을 복제하려면 .ovpn 파일에서 무엇을 해야 할지 잘 모르겠습니다.
내 라우팅 테이블은 이제 다음과 같습니다.
$ sudo netstat -r -n
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.132.0.0 10.8.0.5 255.255.0.0 UG 0 0 0 tun0
104.236.239.153 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
항목이 VPN 외부로 라우팅되는 동안(즉, 항목) 이제 내 서버에 액세스할 수 있는 이유 를 설명하는 항목이 push "route 10.132.0.0 255.255.0.0"
내 안에 있다는 것을 기억하십시오.server.conf
10.132.0.0
0.0.0.0
GUI에서 이 설정을 확인하지 않으면 내 라우팅 테이블은 다음과 같습니다.
$ sudo netstat -r -n
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.8.0.5 0.0.0.0 UG 0 0 0 tun0
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.132.0.0 10.8.0.5 255.255.0.0 UG 0 0 0 tun0
104.236.239.153 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
내 생각엔 첫 번째 0.0.0.0
항목(기본 경로)이 모든 것을 엉망으로 만든 것 같습니다.
답변3
jdmorei의 답변을 자세히 설명하려면 "분할 터널"VPN이 필요합니다. 다음과 같이 말했을 때 실제로 거의 해결책을 찾았습니다 P.S. based on other articles I've tried using no-pull in the .ovpn file and adding in my route settings there but to no avail.
.
ovpn 파일에는 다음이 필요합니다.
route-nopull # Make sure not to pull the default routes
route 10.8.0.0 255.255.255.0 # Route the /24 of 10.8.0.0 across the VPN
route 192.168.2.2 255.255.255.255 # Route the /32 (single IP) across the VPN
이제 핵심은 Windows를 실행하고 있으므로~ 해야 하다openvpn 애플리케이션을 관리자로 실행하십시오. 그렇지 않으면 로그에 다음과 같은 항목이 표시됩니다.
Sat Nov 13 11:31:05 2010 ROUTE: route addition failed using CreateIpForwardEntry
: Access denied. [status=5 if_index=11]
The requested operation requires elevation.
Sat Nov 13 11:31:05 2010 ERROR: Windows route add command failed [adaptive]: ret
urned error code 1
Sat Nov 13 11:31:05 2010 Initialization Sequence Completed
답변4
저는 여기서 FreshTomato를 사용하고 있습니다. 3개의 대상 IP만 VPN으로 리디렉션했습니다.
다음은 OpenVPN 사용자 정의 구성입니다.
allow-pull-fqdn
route-nopull
script-security 2
up /opt/openvpn-routes.sh
그런 다음 위에서 언급한 스크립트는 다음과 같습니다.
root@router:/tmp/home/root# cat /opt/openvpn-routes.sh
#!/bin/sh
ip route add 204.11.51.251/32 dev tun11 # www.linksysinfo.org
ip route add 201.54.48.99/32 dev tun11 # www12.senado.leg.br
ip route add 34.160.111.145/32 dev tun11 # ifconfig.me
/opt 마운트 지점은 다음 지침에 따라 설정되었습니다.https://github.com/Entware/Entware/wiki/Install-on-TomatoUSB-and-FreshTomato