L2TP VPNは、接続中にクライアントの自動ルート構成を実行できますか?


13

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

唯一の問題は

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

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

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


クライアントで「VPNを介してすべてのトラフィックを送信する」などのオプションを無効にしようとしましたか?
バート

回答:


33

OK、この質問はインターネットを介して何度も尋ねられ、ほとんどの場合、元の投稿で説明したことを実行できないという(半)間違った答えがあります。それを一度明確にしましょう:)

簡単な答えは、L2TP(およびその点でPPTP)には、プロトコル内でルートプッシュを行う機能はありませんが、プロトコル外で実現できるということです。

L2TPはマイクロソフトの発明であるため、最良の情報源は技術文書です(ところで、彼らは非常に優れています)。以下で説明することの技術的な説明はVPN AddressingとRoutingで見つけることができます。すべてを適切に設定するためのキーワード(独自の調査を行う場合)は、DHCPINFORMおよび「クラスレス静的ルート」です。

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

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

さて、警告があります:

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

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

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

  • L2TP / IPSEC(またはPPTP)=たとえば、accel-pppはすてきなオープンソース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.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設定)。一部のクライアントには、「クラスベースのルート追加を無効にする」というオプションもあります。実装しようとしている機能を明示的に無効にするため、設定を解除する必要があります。


私の理解では、古典的なL2TPはUDPを介してPPPパケットをカプセル化します。間違っている可能性がありますが、PPPでDHCPがサポートされているとは思いません。特に余分なルートを送信します。L2TPバージョン3(Linuxカーネルランドではまだ新しい)を使用すると、イーサネットフレームをカプセル化できるので、そこで可能になる可能性がありますが、モバイルデバイスでサポートされる方法に関しては、マイレージが異なる可能性があります。
マシューイフェ14

マシュー、たくさんのことを1つの文に混ぜてしまったので、質問に適切に対処する方法が本当にわかりません:)さて、次から始めましょう:提供された構成は、私が監督している何百人ものロードウォリアーで機能しています。ですから、これは実例です。DHCP over PPPでGoogleを使用して、Cisco、Juniperなどによる実装方法に関する多くの技術文書を読むことができます。詳細を知りたくない場合は、L2TPがPPP over UDPをカプセル化することを想像してください。 IPを使用できるポイントツーポイントプロトコル、DHCPはIP上のプロトコルなので、ここで良いです:)
ギャラクシー14

1
また、DHCPINFORMを使用して適切にセットアップする方法を説明するL2TPのMicrosoftテクニカルドキュメントへのリンクを含めたときに、この種のコメントを取得するのは非常に奇妙です。誰かが研究しているので、人々が答えを読みたくないとき(動作中のシステムの設定ファイルが含まれていますが)を理解できますが、技術仕様がある場合は「PPP経由でDHCPがサポートされているとは思わないこれが設計された方法であると述べているプロトコルの作成者は、ちょっと奇妙です。
銀河14

「PPPではDHCPはサポートされていません」という私のポイントを明確にするために、IPアドレスの割り当てはPPPリンク制御プロトコルで行われることを意味します(ポイントツーポイントには「ブロードキャスト」アドレスの概念はありません)。それで、あなたは私が得ていたものを誤解したと思います。これで、接続の確立後にDHCPINFORMがトンネル内で発生し、初期接続とは関係ないということがわかりました。接続がセットアップされた後にクライアントがDHCPINFORMメッセージを送信することを条件に、このスキームが機能することに今同意します。
マシューイフェ14

マシュー、ありがとう:)。はい、アドレスの割り当てにDHCPを使用していません。IPCPによって行われます(あなたが言ったようにLCPではありませんが、これは無関係です)。ルート構成、これはまさに私の答えで説明したものです。さて、誰かがすでに私の答えを投票しましたが、それは有効で有効な答えです:)
銀河14

1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.