web-dev-qa-db-ja.com

接続中にL2TP VPNがクライアントの自動ルート構成を行うことは可能ですか?

これでL2TP VPNサーバーをセットアップしました チュートリアル 、すべてが魅力のように機能します。

唯一の問題は

  1. クライアントがこのVPNを使用してすべてのトラフィックをルーティングするのではなく、特定のサブネットのみをルーティングします。 10.0.0.0/20

  2. Macでは、コマンドを使用して手動でルートを設定する必要がありますが、モバイルデバイスの場合、これを行う方法はないようです。

それで、サブネット「10.0.0.0/20」のクライアントを自動的に構成することは可能ですか?

14
Howard

さて、この質問はインターネットで何度も何度も尋ねられ、ほとんどの場合、元の投稿で説明されていることを実行できない(半)不正解があります。はっきりさせておきましょう:)

短い答えはL2TPです(そしてPPTP)には、プロトコル内部でルートプッシュを行う機能はありませんが、プロトコルの外部で実現できます。

L2TPはマイクロソフトの発明であるため、最良の情報源は技術文書です(ちなみに、彼らは非常に得意です)。以下で説明する技術的な説明は、 VPNアドレス指定とルーティング にあります。すべてを適切に設定するためのキーワード(独自の調査を行う場合)は、DHCPINFORMおよび「クラスレス静的ルート」です。

まず、それがどのように機能するか:

  1. クライアントがVPNサーバーに接続する
  2. 認証が成功した後、安全なトンネルが確立されます
  3. クライアントは、接続後にDHCPINFORMメッセージを使用して、DHCPクラスレス静的ルートオプションを要求します。このDHCPオプションには、要求元クライアントのルーティングテーブルに自動的に追加される一連のルートが含まれています(Microsoftのドキュメントからこの行を直接コピーして貼り付けました:))
  4. vPNサーバーが適切なルートのセットでそのメッセージに返信する

まあ、警告があります:

  • RFC-3442 は「DHCPクラスレス静的ルート」を記述しており、このオプションのコードは121であると述べています。Microsoftは(いつものように)ホイールを再発明し、コード249を使用することを決定しましたオプション。したがって、より幅広いクライアントをサポートするには、両方のコードで応答する必要があります

LinuxボックスをVPNサーバーとして使用する一般的な構成について説明します(Microsoftのドキュメントへのリンクを使用してMSサーバーを構成できます)。

クライアントでルートを構成するには、次の要素が必要です。

  • L2TP/IPSEC(またはPPTP)=たとえば、accel-pppは、NiceオープンソースのL2TP/PPTPサーバーです。
  • DHCPサーバー=多数ありますが、dnsmasqの構成について説明します

以下は、動作中の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.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

追伸上記の構成を正常に使用するために必要な重要な部分をほとんど忘れていました。まあ、それは私が参照したマイクロソフトのドキュメントに記載されていましたが、誰がドキュメントを読みましたか? :) OK、クライアントはVPN接続で「デフォルトゲートウェイを使用する」なしで設定する必要があります(Windowsでは、接続のプロパティにあります->ネットワーク->インターネットプロトコルバージョン4(TCP/IPv4)->プロパティ->詳細-> IP設定)。一部のクライアントには、「クラスベースのルート追加を無効にする」というオプションもあります。実装しようとしている機能を明示的に無効にするため、設定を解除する必要があります。

34
galaxy

L2TP/IPSEC VPNでクライアントへのルートをプッシュできないと思います。クライアント上で直接構成を行う必要があります。

問題のあるモバイルクライアントは何ですか。使用しているオペレーティングシステムとソフトウェアがわかっている場合は、簡単に入力できます。

1
pehrs