このチュートリアルでL2TP VPNサーバーをセットアップしました。すべてが魅力のように機能します。
唯一の問題は
クライアントがこのVPNを使用してすべてのトラフィックをルーティングするのではなく、特定のサブネット(10.0.0.0/20など)のみをルーティングする
Macでは、コマンドを使用して手動でルートを設定する必要がありますが、モバイルデバイスの場合、そうする方法はないようです。
それで、サブネット「10.0.0.0/20」のクライアントを自動的に構成することは可能ですか?
このチュートリアルでL2TP VPNサーバーをセットアップしました。すべてが魅力のように機能します。
唯一の問題は
クライアントがこのVPNを使用してすべてのトラフィックをルーティングするのではなく、特定のサブネット(10.0.0.0/20など)のみをルーティングする
Macでは、コマンドを使用して手動でルートを設定する必要がありますが、モバイルデバイスの場合、そうする方法はないようです。
それで、サブネット「10.0.0.0/20」のクライアントを自動的に構成することは可能ですか?
回答:
OK、この質問はインターネットを介して何度も尋ねられ、ほとんどの場合、元の投稿で説明したことを実行できないという(半)間違った答えがあります。それを一度明確にしましょう:)
簡単な答えは、L2TP(およびその点でPPTP)には、プロトコル内でルートプッシュを行う機能はありませんが、プロトコル外で実現できるということです。
L2TPはマイクロソフトの発明であるため、最良の情報源は技術文書です(ところで、彼らは非常に優れています)。以下で説明することの技術的な説明はVPN AddressingとRoutingで見つけることができます。すべてを適切に設定するためのキーワード(独自の調査を行う場合)は、DHCPINFORMおよび「クラスレス静的ルート」です。
まず第一に、それがどのように機能するか:
さて、警告があります:
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設定)。一部のクライアントには、「クラスベースのルート追加を無効にする」というオプションもあります。実装しようとしている機能を明示的に無効にするため、設定を解除する必要があります。