職場のデスクトップマシンとしてUbuntu 22.04 LTSを新規導入してからつまずいたことの一つ、L2TP/IPsecでのVPN接続に関して。L2TP/IPsecに必要なパッケージを導入しただけの状態ではVPN接続がうまく行かないようなので、その解消方法をメモしておきます。
項目 | 内容 |
---|---|
OS | Ubuntu 22.04.2 LTS (Jammy Jellyfish) のGNOMEデスクトップ環境 |
VPNの接続方式 | L2TP/IPsec |
sudo apt install network-manager-l2tp network-manager-l2tp-gnome
$ tail -F /var/log/syslog | grep -E 'pppd|xl2tpd'
(snip)
Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: check_control: Received out of order control packet on tunnel 699 (got 2, expected 3)
Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: handle_control: bad control packet!
Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: check_control: Received out of order control packet on tunnel 699 (got 2, expected 3)
Jun 13 ZZ:ZZ:ZZ ホスト名 NetworkManager[28364]: xl2tpd[28364]: handle_control: bad control packet!
$ route -n | grep 接続先IPアドレス
接続先IPアドレス 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 # ←これが不要らしい
接続先IPアドレス ローカルIPアドレス 255.255.255.255 UGH 50 0 0 enp2s0
https://github.com/nm-l2tp/NetworkManager-l2tp/issues/132#issuecomment-1155098198 の内容を参考に、loggerのオプションを少し変更しています。
sudo vim /etc/ppp/ip-up.d/0001routes
などで次の内容のファイルを作成する#!/bin/sh
# 0001routes
# Ref: https://github.com/nm-l2tp/NetworkManager-l2tp/issues/132#issuecomment-1155098198
# This script is called with the following arguments:
# Arg Name
# $1 Interface name
# $2 The tty
# $3 The link speed
# $4 Local IP address for the interface
# $5 Peer IP address
# $6 Optional 'ipparam' parameter specified to pppd
logger -t 0001routes "Removing wrong vpn ip address on $1 for local $4 and peer $5."
ip addr del $4 peer $5 dev $1
sudo chmod +x /etc/ppp/ip-up.d/0001routes
で実行権限を付与する0001routes
が実行されてsyslogに次のメッセージが出力され、ip addr del ...
が行われたであろうことがわかるJun 13 ZZ:ZZ:ZZ ホスト名 0001routes: Removing wrong vpn ip address on ppp0 for local XXX.XXX.XXX.XXX and peer YYY.YYY.YYY.YYY.
/etc/ppp/ip-up.d/0001routes
の施策は、過去に次のリンクで紹介したopenfortivpnとどうも併用できません。必要なルート設定を削除してしまうということらしく、対策を考え中。
上記の「openfortivpnと併用できない」問題は、ナイスな解法が思いつかず、結局のところ運用でカバーしています。具体的には、次のようなaliasを用意しておき、
alias forti-off='sudo chmod +x /etc/ppp/ip-up.d/0001routes'
alias forti-on='sudo chmod -x /etc/ppp/ip-up.d/0001routes'
openfortivpnでVPN接続を行うときにはforti-on
(スクリプト0001routes
を非実行化)、別のVPN接続へ切り替えるときにはforti-off
(スクリプト0001routes
を実行化) を実行することにしています。