Tech Note Plus

PC から Azure まで幅広い伝道を目指してます

OpenWrt で strongSwan (IPsec VPN) を用いて Azure とプライベート接続する

この記事では OpenWrt の strongSwan に関する設定を記載しています。既に OpenWrt を用いたインターネット接続は以下の記事にて完了しています。 cube309b.hatenablog.com

strongSwan に求める要件

やりたいこと

とりあえず一点だけです。Azure と IPsec VPN でプライベートに接続したい。
(今回は Azure 側のアーキテクチャーをあれこれというより、あくまで OpenWrt と Azure を IPsec VPN で接続できれば良いので、 Hub とか Spoke とかは出てきません)

OpenWrt における strongSwan の実装方法

OpenWrt では追加のモジュールを導入して設定をすることで、strongSwan を構成できます。 ただし、strongSwan 自体は GUI はなく、CLI のみでの設定となります。

strongSwan の設定方法

方式概要

strongSwan を設定する際に必要なのは以下の 3 つのファイルと、起動時処理に必要になるファイルの合計 4 つとなります。

  1. /etc/ipsec.conf:IPsec VPN の接続先情報が記載されているファイル
  2. /etc/ipsec.secrets:IPsec VPN 接続時に利用する共有キーの情報が記載されているファイル
  3. /etc/strongswan.conf:strongSwan 自体の設定ファイル
  4. /etc/ipsec.conf:起動処理中に VPN 接続を行うためのファイル

strongSwan 及び関連モジュール
  1. [システム]-[ソフトウェア] フィルターip-full と入力し、インストール を押します。
    ※ 一度 OS を再起動してしまうとパッケージリストの取り直しが必要なので、その場合は「リストを更新..」を実施してください。
  2. 依存関係の確認が行われるので インストール を押します。
  3. パッケージが読み込まれるので、閉じる を押します。
  4. 1-3 を繰り返します。パッケージ名は kmod-ip-vti です。
  5. 1-3 を繰り返します。パッケージ名は kmod-crypto-gcm です。このモジュールは、Azure 側の VPN を既定で設定した場合に不足するアルゴリズムの追加のために使われます。
  6. 1-3 を繰り返します。パッケージ名は strongswan-minimal です。なお、インストールすると 100% 何かでます。 少し調べたところ、アップデートが長く実行中ですというのと、strongSwan の実行方式が swanctl に変わったので差し替えてくださいという警告のようです。 とりあえず動くのでこのままで。(確かに ipsec.conf とか記述がわかりづらい・・・)
Azure 側の環境準備
  1. Gateway サブネット用にアドレス空間に空きのある仮想ネットワークを事前に作成しておいてください。
  2. 仮想ネットワーク ゲートウェイを作成します。ポイントは以下です。作成には 30-40 分程度かかりますので、先に進めつつ完成したらパブリック IP アドレスを控えます。

    設定 コメント
    SKU Basic で可
    種類 ルートベース

  3. ローカル ネットワーク ゲートウェイを作成します。ポイントは以下です。

    設定 コメント
    IP アドレス 自宅側のグローバル IP アドレス
    アドレス空間 自宅の LAN 側のネットワークアドレス

  4. 接続オブジェクトを作成します。ポイントは以下です。

    設定 コメント
    接続の種類 サイト対サイト (IPsec)
    仮想ネットワークゲートウェイ 前項で作成が終わったものを指定
    ローカルネットワークゲートウェイ 前項で作成が終わったものを指定
    共有キー 作成して文字列を控える
    その他 既定で可

/etc/ipsec.conf の記述

SSH で OpenWrt に接続し、vi エディタなどでファイルに以下を追記します。

conn %default
      ikelifetime=60m
      keylife=20m
      rekeymargin=3m
      keyingtries=1
      authby=secret
      keyexchange=ikev2
      mobike=no 
conn Azure auto=start type=tunnel aggressive=no ike=aes256-sha1-modp1024,aes256-sha256-modp1024,aes128-sha1-modp1024,aes128-sha256-modp1024,3des-sha1-modp1024 esp=aes256-sha1,aes256-sha256,aes128-sha1,aes128-sha256,aes128-sha1,3des-sha1,aes256gcm16,aes128gcm16 mark=42 mark_in=42 mark_out=42 left=1.1.1.1 leftsubnet=10.0.0.0/24 leftid=1.1.1.1 leftauth=psk leftfirewall=no right=2.2.2.2 rightsubnet=172.29.0.0/16,172.30.0.0/16 rightid=2.2.2.2 rightauth=psk rightfirewall=no

コメント
left 自宅側のグローバル IP アドレス
leftsubnet 自宅の LAN 側のネットワークアドレス
leftid 自宅側のグローバル IP アドレス
right VPN ゲートウェイのパブリック IP アドレス
rightsubnet 仮想ネットワークで用いているネットワークアドレス
rightid VPN ゲートウェイのパブリック IP アドレス

※ ~firewall は no にします。ここを yes にしてしまうと、OpenWrt に複数存在する現在非推奨のファイアウォール機能側にルールを勝手に追加してしまい、警告が発生することになります。 no でも fw4 にて制御してくれます。

/etc/ipsec.secrets の記述

SSH で OpenWrt に接続し、vi エディタなどでファイルに以下を追記します。
自宅側のグローバル IP アドレス VPN ゲートウェイのパブリック IP アドレス 共有キーの並びです。

1.1.1.1 2.2.2.2 : PSK "gokGkaWE3"
/etc/strongswan.conf の記述

SSH で OpenWrt に接続し、vi エディタなどでファイルの load_modular = yes の上の行に以下を追記します。

install_routes=no
install_virtual_ip=no

こんな形です。

charon {
    install_routes=no
    install_virtual_ip=no
    load_modular = yes
    plugins {
        include strongswan.d/charon/*.conf
    }
}
/etc/rc.local の記述

[システム]-[スタートアップ]-[ローカルスタートアップ] 以下を exit 0 の行より上に貼り付け保存します。 (もちろん、流れで SSH 使ってファイルを編集するのでも構いません)

ip tunnel add vti0 local 1.1.1.1 remote 2.2.2.2 mode vti key 42
sysctl -w net.ipv4.conf.vti0.disable_policy=1
ip link set vti0 up
ip route add 172.29.0.0/16 dev vti0
ip route add 172.30.0.0/16 dev vti0
コメント
tunnel add vit の後の数字は覚えておく
local 自宅側のグローバル IP アドレス
remote VPN ゲートウェイのパブリック IP アドレス
ip route add 仮想ネットワークで用いているネットワークアドレス

OS の再起動と接続確認

OS の再起動後、再度 SSH で OpenWrt に接続し、以下のコマンドを入力してトンネルのリンクアップを確認します。

ipsec statusall
中略
Security Associations (1 up, 0 connecting):
中略
インターフェースの登録
  1. [ネットワーク]-[インターフェース]-[インターフェース] インターフェースを新規作成を押します。
  2. 名前:vitx (前項で確認したデバイス名)プロトコル:アンマネージドバイス:vtix (前項で確認したデバイス名) として、インターフェースを作成を押します。
    ※ 画面は作成後ですのでエラーが表示されますが、本来であればエラーは表示されません。
  3. [ファイアウォール設定] ファイアウォールゾーンの作成または割り当てlan に変更し、保存 → 保存&適用を押します。
通信の許可
  1. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール]-[Allow-IPSec-ESP (編集)]-[一般設定] 以下の設定を行います。

    設定項目 設定値
    送信元アドレス VPN ゲートウェイのパブリック IP アドレス/32
    宛先ゾーン バイス (入力)

  2. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール]-[詳細設定] アドレスファミリの制限IPv4 のみに変更し、保存を押します。

  3. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-IPSec-ESP ルールの有効化をチェックし、保存&適用を押します。

  4. 1-3 を繰り返します。ルール名は Allow-ISAKMP です。

  5. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] 追加を押します。

  6. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール]-[一般設定] 以下の設定を行います。

    設定項目 設定値
    名前 定義の名前。わかりやすく
    プロトコル UDP
    送信元ゾーン wan
    送信元アドレス VPN ゲートウェイのパブリック IP アドレス/32
    宛先ゾーン バイス (入力)
    宛先ポート 4500

  7. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール]-[詳細設定] アドレスファミリの制限IPv4 のみに変更し、保存 → 保存&適用を押します。

  8. この時点で接続できるようになっているはずですので、疎通確認を行ってください。

設定ファイル作成のための参考サイト

設定に当たっては、以下の情報を参考にしました。

KB: Connecting OpenWRT/LEDE router to Azure Virtual Network Gateway (IKEv2) | JeffChiu.com

ただし、この情報を読んだりフォーラムを除いたりそこで紹介されていた設定の youtube 動画も見ましたが結局うまくいかず、 試行錯誤の結果今回の投稿にはなっています。。。

OpenWrt の strongSwan 設定を終えて

こうして OpenWrt を使って strongSwan で Azure とプライベート接続可能になりました。 初期導入の流れはこれにていったん完了となりますが、まだ課題は残っているので順次対応していきたいなと。 さっそく、新しいバージョン公開されましたし。 cube309b.hatenablog.com


Note
・ 当ブログは個人主催であり、ブログ中のすべての情報は個人的な観点となります。
・ 情報については正確な内容となるよう努めますが、完全性や正確性、有用性、安全性、最新性について一切保証できかねます。