GNU/Linux >> Linux の 問題 >  >> Linux

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

OK、この質問はインターネット上で何度も聞かれますが、ほとんどの場合、元の投稿で説明したことはできないという (半) 間違った回答があります。はっきりさせておきます:)

簡単に言えば、L2TP (およびその件に関しては PPTP) には、プロトコル内でルート プッシュを行う機能がありませんが、プロトコル外で実現できます。

L2TP は Microsoft の発明であるため、最良の情報源は Microsoft の技術文書です (ちなみに、L2TP は非常に得意です)。以下で説明する内容の技術的な説明は、VPN Addressing and Routing で見つけることができます。すべてを適切に設定するためのキーワード (独自の調査を行う場合) は、DHCPINFORM と「クラスレス スタティック ルート」です。 /P>

まず、仕組み:

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

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


    Linux
    1. Linux – Fedora用のソフトウェアのようなディープフリーズ?

    2. 何でも–Linux用の軽量Evernoteクライアント

    3. WhatsAppデスクトップ–Linux用の非公式のWhatsAppデスクトップクライアント

    1. 伝送–Linux用のクロスプラットフォームBitTorrentクライアント

    2. CentOS / RHEL :ssh 自動ログアウトのセッション アイドル タイムアウト (非アクティブ タイムアウト) を設定する方法

    3. オプション以外の TCP ラッパー

    1. Lightdmのすべての可能な構成オプションのリスト?

    2. Pithos –Linux用のPandoraラジオクライアント

    3. Chirp –Linux用の電子ベースのTwitterクライアント