🚅

NEC IX2215とUbuntu24.04 LTSでL2TP/IPsec接続を行う

2024/09/14に公開

当環境は、もともとL2TP/Wireguardという形で拠点間接続を行っていました。
最近、自宅ネットワーク環境の見直しを行うに伴ってNEC UNIVERGEシリーズのIX2215というVPN対応の業務用ルーターを購入しました。世間的にはIX2106のほうが人気なのかな..?

VRF対応でポート数も多く、CLIがCiscoのIOSライクな構文であることが決め手です。
また、VPN接続で最大1.3Gbpsという自宅で使うには十分なスペックを持っています。
せっかくハードウェアでVPNが使えるので、別拠点のUbuntu VMとの拠点間接続をL2TP/IPSecで行う環境を構築しました。
トンネルモードだと色々楽ですからね。

環境 - Envs

naxii@test-machine:~$ cat /etc/os-release

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
IX2115# show version
NEC Portable Internetwork Core Operating System Software
IX Series IX2215 (magellan-sec) Software, Version 10.9.11, RELEASE SOFTWARE
Compiled Dec 15-Fri-2023 13:35:51 JST #2 by sw-build, coregen-10.9(11)

ROM: System Bootstrap, Version 24.1
System Diagnostic, Version 24.1
Initialization Program, Version 2.1

IX2215 の設定

L2TP/IPsec を有効化

詳しい設定方法はこちらをご参照ください。
コマンドラインで設定することも出来ますが、WebUIが使えるのであればそれを使うほうが断然楽です。
ここではWebUIで設定を行います。

  1. IX2215 のWebUIにログインする
  2. 「詳細設定」→「VPN・クラウド」→「VPNの設定」から、接続種別をL2TP/IPsecに変更
  3. 同時接続数、アドレス割り当て範囲等を適当に設定
  4. IKEの事前共有鍵を設定
  5. ユーザーの作成
  6. DNS通知設定(しなくてもよい)
  7. 保存

これでL2TP/IPsecの接続を受け付けるようになります。
もし、IX2215をLAN内専用のルーターとして使用している環境の場合は、HGW等の静的NAPTの設定が必要です。
具体的には、IKE用の500/UDP 4500/UDP ESPの静的NAPTを登録します。
もしくは、IX2215のWAN側IPv4アドレスに対しHGWでDMZを登録し、パケットフィルタリングされないようにしてください。
IX2215自体の静的NAPTは、WebUIでL2TP/IPsecの設定を行った時点で自動登録されます。

IKEとIPsecに関するIX2215の設定はこのようになっています。

ike nat-traversal
!
ike proposal ke4 encryption aes-256 hash sha group 2048-bit
ike proposal web_l2tp_ikeprop1 encryption aes-256 hash sha group 1024-bit
ike proposal web_l2tp_ikeprop2 encryption aes hash sha group 2048-bit
ike proposal web_l2tp_ikeprop3 encryption aes hash sha group 1024-bit
ike proposal web_l2tp_ikeprop4 encryption 3des hash sha group 1024-bit
!
ike policy web_l2tp_ikepolicy peer any key XXXXXXXXX web_l2tp_ikeprop1,web_l2tp_ikeprop2,web_l2tp_ikeprop3,web_l2tp_ikeprop4
!
ipsec autokey-proposal web_l2tp_secprop1 esp-aes-256 esp-sha
ipsec autokey-proposal web_l2tp_secprop2 esp-aes esp-sha
ipsec autokey-proposal web_l2tp_secprop3 esp-3des esp-sha
!
ipsec dynamic-map web_l2tp_secpolicy web_vpnlist web_l2tp_secprop1,web_l2tp_secprop2,web_l2tp_secprop3

Ubuntu 24.04 LTS の設定

Netplanの設定変更

このバージョンのUbuntuは、netplanがデフォルトで使用されているのでこれをNetworkManagerに変更します。

先にNetworkManagerと関連パッケージをインストールします。

sudo apt install network-manager network-manager-l2tp

設定ファイルを開きます。

sudo nano /etc/netplan/50-cloud-init.yaml

rendererNetworkManagerに設定します。
この時、固定IP等をnetplanで設定している場合はNetworkManagerで設定し直す必要があります。

network:
  version: 2
  renderer: NetworkManager

設定を適用します。

sudo netplan apply

NetworkManagerの有効化・コネクション登録

NetworkManagerを立ち上げます。

sudo systemctl start NetworkManager

次に、L2TP/IPsecのコネクションを登録します。長いです。

sudo nmcli connection add connection.id <コネクションID> con-name <コネクション名> \
type VPN vpn-type l2tp ifname -- connection.autoconnect no ipv4.method auto \
vpn.data "gateway=<接続先IPアドレス>, ipsec-enabled=yes, ipsec-psk=<IKEの事前共有鍵>, ipsec-ike=aes256-sha1-modp1024, ipsec-esp=aes256-sha1, mru=1500, mtu=1500, password-flags=0, refuse-chap=no, refuse-mschap=no, refuse-pap=yes, require-mppe=no, user=<ユーザー名>, user-auth-type=mschap-v2" \
vpn.secrets password=<パスワード>
  • =の後にスペースを入れたりするとそれも文字列として認識されてしまうようです。=の後は詰めて入力してください。
  • ipsec-ikeipsec-espはご自身のIXの設定で対応しているものを選択してください。
  • PPPの認証プロトコルであるPAPは平文で認証情報を送ってしまうためセキュリティ上よくありません。CHAPを使いましょう。

インターフェイスの有効化

登録したコネクションを立ち上げます。

sudo nmcli conn up <コネクション名>

インターフェイスの状態を確認します。

nmcli

IPアドレスやルート情報が正常に登録されていることが確認できます。

<コネクション名> VPN connection
        master ens18, VPN, ip4 default
        inet4 10.0.0.2/32
        route4 192.168.0.X/32 metric 0
        route4 default metric 50
        route4 192.168.0.X/32 metric 50

eth0: connected to Wired connection 1
        ~~省略~~

lo: connected (externally) to lo
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
        inet4 127.0.0.1/8
        inet6 ::1/128

ppp0: disconnected
        "ppp0"
        ppp, sw, mtu 1406

DNS configuration:
        ~~省略~~

systemdに登録

NetworkManager起動時に自動接続するオプションconnection.autoconnectがありますが、私の環境ではうまく動作しませんでした。
接続コマンドをシェルスクリプトに記述し、それをブート時にsystemdのサービスとして呼び出す方法を取ります。

接続を行うコマンドを記述したシェルスクリプトを書きます。パスは適当でいいと思います。

touch ~/vpn_connect.sh
chmod +x ~/vpn_connect.sh
nano ~/vpn_connect.sh
#!/bin/bash
sudo nmcli conn up <コネクション名>

次に、サービスを登録します。

sudo touch /etc/systemd/system/vpn_connect.service
sudo nano /etc/systemd/system/vpn_connect.service
[Unit]
Description=L2TP/IPSec VPN Connect
After=network.target

[Service]
Type=oneshot
ExecStart=<パス>/vpn_connect.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

変更を適用します。

sudo systemctl daemon-reload

一度サービスを確認し、動作を確認します。

sudo systemctl start vpn_connect

エラーなど発生しなければ、自動起動を有効にします。

sudo systemctl enable vpn_connect

以上です。

Discussion