📌

Arch Linux から RTX1210のVPN (L2TP/IPsec)に接続する

2023/06/28に公開

結構時間が掛かったので備忘録
RTXは大変なようですね

環境など

環境

  • kernel: Linux archlinux 6.3.9-arch1-1
  • Desktop: plasma-desktop 5.27.6-1 (KDE Plasma)
  • 設定ソフト: systemsettings 5.27.6-1 (KDE Plasma付属のもの)
  • ルーター: YAMAHA RTX1210

使用したソフトウェア

  • NetworkManager networkmanager 1.42.6-1
    ネットワーク管理用ソフト
  • L2TP用のプラグイン networkmanager-l2tp 1.20.8-1
    NetworkManagerでL2TPを利用可能にするもの
  • IPsec用のプラグイン libreswan 4.11-1
    IKEv1, IKEv2 方式のプラグイン

設定

前提

RTX1210 (L2TP/IPsec)を使用した社内VPNにクライアントとして接続したい。
情報は

  • VPNのグローバルIP
  • ユーザー名
  • パスワード
  • 事前共有鍵 (PSK, Pre Shared Key)
  • VPNのローカルIP (なければ調べられる)

Connections での設定

  1. Connection name: 好きなものを
  2. Gateway: 接続先のグローバルIP
  3. Username: ユーザ名を入力
  4. Password: パスワードを入力

IPsec Settings での設定

  1. Pre-shared key: 事前共有鍵
  2. Remote ID: VPNのローカルIPを指定する必要がある (※1 後ほど説明)
  3. Phase1,2 Algorithms: これも正しいものを指定する必要がある
    Querying VPN server for its IKEv1 algorithm proposals
    ↑ このスクリプトを使って調べる。
    私の環境では↓こうなったので、この中から適当に選んだ。
    SA=(Enc=3DES Hash=MD5 Auth=PSK Group=1:modp768 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=3DES Hash=MD5 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=3DES Hash=MD5 Auth=PSK Group=5:modp1536 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=1:modp768 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=5:modp1536 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=1:modp768 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=2:modp1024 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=5:modp1536 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=1:modp768 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=2:modp1024 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=5:modp1536 KeyLength=128 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=1:modp768 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=2:modp1024 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=MD5 Auth=PSK Group=5:modp1536 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=1:modp768 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=2:modp1024 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    SA=(Enc=AES Hash=SHA1 Auth=PSK Group=5:modp1536 KeyLength=256 LifeType=Seconds LifeDuration(4)=0x00007080)
    

PPP Settings での設定

  1. Allow following authentication methods: MSCHAPv2のみにする
  2. Use MPPE Encryption: ONにして、Use statefull encryption もONに
  3. MRU, MTU: 設定しなくても良さそう

進め方とトラブルシュート

前提

L2TPは次の順序で接続を行う。

  1. IPsec
  2. PPP

コケる場合、どの段階でコケているか調べる必要がある。

こんな感じで接続状況を監視しつつ、接続試行を繰り返すと良い。

watch  'sudo journalctl --since today -u NetworkManager | tail -n 30'

VPNのローカルIPが指定されていない(IPsecが失敗する)場合

journalに次のような出力が発生する (各行の前半は省略している)。

NetworkManager: Peer ID is ID_IPV4_ADDR: '172.X.X.X'
NetworkManager: Peer ID '172.X.X.X' mismatched on first found connection and no better connection found
NetworkManager: sending encrypted notification INVALID_ID_INFORMATION to 150.X.X.X:4500
NetworkManager: STATE_MAIN_I3: retransmission; will wait 0.5 seconds for response
...
nm-l2tp-service: Could not establish IPsec connection.

この場合、172.X.X.XがVPNのローカルIPである(私は設定してないのでたぶん)。

うまく行くと次のような出力がある。

nm-l2tp-service: Libreswan IPsec connection is up.

VPNの認証方式に誤りがある(PPPが失敗する)場合

journalに次のような出力が発生する (各行の前半は省略している)。

...
pppd: Connection terminated.
pppd: Connect time 0.1 minutes.
pppd: Sent 11901 bytes, received 16893 bytes.
pppd: Modem hangup
pppd: Exit.

うまく行くと次のような出力がある。

NetworkManager: <info>  policy: set 'VPN-NAME' (ppp0) as default for IPv4 routing and DNS

参考

Discussion