OK、この質問はインターネット上で何度も聞かれますが、ほとんどの場合、元の投稿で説明したことはできないという (半) 間違った回答があります。はっきりさせておきます:)
簡単に言えば、L2TP (およびその件に関しては PPTP) には、プロトコル内でルート プッシュを行う機能がありませんが、プロトコル外で実現できます。
L2TP は Microsoft の発明であるため、最良の情報源は Microsoft の技術文書です (ちなみに、L2TP は非常に得意です)。以下で説明する内容の技術的な説明は、VPN Addressing and Routing で見つけることができます。すべてを適切に設定するためのキーワード (独自の調査を行う場合) は、DHCPINFORM と「クラスレス スタティック ルート」です。 /P>
まず、仕組み:
<オール>注意点があります:
- 「DHCP クラスレス スタティック ルート」を説明する RFC-3442 があり、このオプションのコードは 121 であると記載されています。Microsoft は (いつものように) 車輪を再発明することを決定し、このオプションにコード 249 を使用します。したがって、より幅広いクライアントをサポートするには、両方のコードで応答する必要があります
Linux ボックスを VPN サーバーとして使用する一般的な構成について説明します (Microsoft のドキュメントへのリンクを使用して、MS サーバーを構成できます)。
クライアントでルートを構成するには、次の要素が必要です:
- L2TP/IPSEC (または PPTP) =たとえば、accel-ppp は優れたオープン ソースの L2TP/PPTP サーバーです
- DHCP サーバー =いろいろありますが、dnsmasq の設定について説明します
以下は、動作中の accel-ppp 構成のダンプです。私はそれ全体を提供しています。そうしないと、何がどこにあるのかを説明するのが難しくなります。すでに VPN が機能している場合は、この構成ファイルをスキップして、以下で説明する DHCP 構成に専念できます。
[[email protected] ~]# 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
[[email protected] ~]#
===
この時点で、クライアントは L2TP (または PPTP) 経由で接続し、VPN サーバーと通信できます。したがって、唯一欠けている部分は、作成されたトンネルをリッスンし、必要な情報で応答する DHCP サーバーです。以下は、dnsmasq 構成ファイルからの抜粋です (DHCP 関連のオプションのみを提供しています):
[[email protected] ~]# 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
[[email protected] ~]#
上記の抜粋では、ルート 192.168.70.0/24、192.168.75.0/24、および 10.0.0.0/24 を 192.168.99.254 (VPN サーバー) 経由でプッシュしています。
最後に、ネットワーク トラフィック (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
追記上記の構成をうまく使用するために必要な重要な部分をほとんど忘れていました。さて、参考にした Microsoft のドキュメントに書いてありましたが、誰がドキュメントを読んだのでしょうか。 :) OK、クライアントは VPN 接続で「デフォルト ゲートウェイを使用」せずに構成する必要があります (Windows では、接続のプロパティ -> ネットワーク -> インターネット プロトコル バージョン 4 (TCP/IPv4) -> プロパティ -> 詳細設定 -> IP 設定にあります) )。一部のクライアントには、「クラスベースのルート追加を無効にする」というオプションもあります。実装しようとしている機能を明示的に無効にするため、設定を解除する必要があります。