답변:
좋습니다.이 질문은 인터넷을 통해 계속해서 다시 묻습니다. 대부분의 경우 원래 게시물에 설명 된 내용을 수행 할 수 없다는 (반) 정답이 있습니다. 한 번에 모두 명확하게 설명하겠습니다. :)
짧은 대답은 L2TP (그리고 그 문제에 대한 PPTP)는 프로토콜 내부에서 경로 푸시를 수행하는 기능이 없지만 프로토콜 외부에서 달성 할 수 있다는 것입니다.
L2TP는 Microsoft의 발명품이므로 정보의 가장 좋은 출처는 기술 문서입니다 (그리고 기술적으로도 능숙합니다). 아래에서 설명 할 내용에 대한 기술적 설명은 VPN 주소 지정 및 라우팅 에서 찾을 수 있습니다 . 모든 것을 올바르게 설정하기위한 키워드는 (자신의 연구를하려는 경우) DHCPINFORM 및 "classless static route"입니다.
우선, 작동 방식 :
글쎄, 경고가 있습니다 :
Linux 상자를 VPN 서버로 사용하는 일반적인 구성에 대해 설명하겠습니다 (Microsoft 설명서 링크를 사용하여 MS 서버를 구성 할 수 있음).
클라이언트에서 경로를 구성하려면 다음 구성 요소가 필요합니다.
다음은 작동중인 accel-ppp 구성의 덤프입니다. 나는 그것을 전체적으로 제공하고 있습니다. VPN이 이미 작동중인 경우이 구성 파일을 건너 뛰고 아래 설명 된 DHCP 구성에 집중할 수 있습니다.
[root@vpn ~]# cat /opt/accel-ppp/config/accel-ppp.conf
[modules]
log_syslog
pptp
l2tp
auth_mschap_v2
ippool
sigchld
chap-secrets
logwtmp
[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4
[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
check-ip=1
single-session=replace
mppe=require
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
[lcp]
lcp-echo-interval=30
lcp-echo-failure=3
[auth]
#any-login=0
#noauth=0
[pptp]
echo-interval=30
echo-failure=3
verbose=1
[l2tp]
host-name=access-vpn
verbose=1
[dns]
dns1=192.168.70.251
dns2=192.168.70.252
[client-ip-range]
disable
[ip-pool]
gw-ip-address=192.168.99.254
192.168.99.1-253
[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=3
[chap-secrets]
gw-ip-address=192.168.99.254
chap-secrets=/etc/ppp/chap-secrets
[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
[root@vpn ~]#
===
이 시점에서 클라이언트는 L2TP (또는 PPTP)를 통해 연결하고 VPN 서버와 통신 할 수 있습니다. 따라서 누락 된 유일한 부분은 생성 된 터널에서 수신 대기하고 필요한 정보로 다시 응답하는 DHCP 서버입니다. 다음은 dnsmasq 구성 파일에서 발췌 한 것입니다 (DHCP 관련 옵션 만 제공합니다).
[root@vpn ~]# grep -E '^dhcp' /etc/dnsmasq.conf
dhcp-range=192.168.99.254,static
dhcp-option=option:router
dhcp-option=121,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=249,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=vendor:MSFT,2,1i
[root@vpn ~]#
위의 발췌에서 우리는 192.168.99.254 (VPN 서버)를 통해 192.168.70.0/24, 192.168.75.0/24 및 10.0.0.0/24 경로를 푸시합니다.
마지막으로 네트워크 트래픽을 스니핑하면 (예 : VPN 서버에서) DHCPINFORM 메시지에 대한 응답이 다음과 같이 표시됩니다.
19:54:46.716113 IP (tos 0x0, ttl 64, id 10142, offset 0, flags [none], proto UDP (17), length 333)
192.168.99.254.67 > 192.168.99.153.68: BOOTP/DHCP, Reply, length 305, htype 8, hlen 6, xid 0xa27cfc5f, secs 1536, Flags [none]
Client-IP 192.168.99.153
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.99.254
Domain-Name Option 15, length 18: "vpn.server.tld"
Classless-Static-Route-Microsoft Option 249, length 24: (192.168.70.0/24:192.168.99.254),(192.168.75.0/24:192.168.99.254),(10.0.0.0/24:192.168.99.254)
Vendor-Option Option 43, length 7: 2.4.0.0.0.1.255
PS 나는 위의 구성을 성공적으로 사용하는 데 필요한 필수 부분을 거의 잊어 버렸습니다. 글쎄, 그것은 내가 언급 한 Microsoft 문서에 설명되어 있지만 누가 문서를 읽었습니까? :) OK, 클라이언트는 VPN 연결에서 '기본 게이트웨이 사용'없이 구성해야합니다 (Windows의 경우 연결 속성-> 네트워킹-> 인터넷 프로토콜 버전 4 (TCP / IPv4)-> 속성-> 고급-> IP 설정) ). 일부 클라이언트에는 '클래스 기반 경로 추가 비활성화'라는 옵션도 있습니다. 구현하려는 기능을 명시 적으로 비활성화하기 때문에 설정 해제해야합니다.