📌
Arch Linux から RTX1210のVPN (L2TP/IPsec)に接続する
結構時間が掛かったので備忘録
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 での設定
- Connection name: 好きなものを
- Gateway: 接続先のグローバルIP
- Username: ユーザ名を入力
- Password: パスワードを入力
IPsec Settings での設定
- Pre-shared key: 事前共有鍵
- Remote ID: VPNのローカルIPを指定する必要がある (※1 後ほど説明)
-
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 での設定
- Allow following authentication methods: MSCHAPv2のみにする
- Use MPPE Encryption: ONにして、Use statefull encryption もONに
- MRU, MTU: 設定しなくても良さそう
進め方とトラブルシュート
前提
L2TPは次の順序で接続を行う。
- IPsec
- 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
参考
-
Arch LinuxでL2TP/IPSecに接続するときにハマった
バージョン固定が必要などの記載がありましたが、今回の環境では不要でした - Querying VPN server for its IKEv1 algorithm proposals
Discussion