手当たり次第に書くんだ

飽きっぽいのは本能

VyOS Azure 版 OpenVPN – Marketplace イメージでリモートアクセス VPN を構成する

Azure Marketplace の VyOS を OpenVPN サーバーとして使う場合、VyOS の設定だけでは通信は完成しません。Azure の Public IP、NSG、NIC の IP 転送、ユーザー定義ルート、戻り経路を、VyOS の PKI、OpenVPN、Firewall と対応させる必要があります。

この記事は、Azure Marketplace イメージで確認した VyOS 1.4.3 の記録を出発点に、VyOS 1.5 の設定体系で読み直したものです。掲載コマンドは VyOS 1.5 を基準にしています。Marketplace イメージのバージョンや初期設定は変更されるため、作業前に実際のイメージと show version の結果を確認してください。

例では、OpenVPN クライアント用ネットワークを 10.250.0.0/24、到達させる Azure VNet 側ネットワークを 10.20.0.0/16、待受ポートを UDP 1194 とします。アドレスと証明書名は環境に合わせて置き換えます。

この記事の結論

  • Azure Public IP と NSG で UDP 1194 を VyOS の NIC へ到達させる
  • VyOS では PKI に CA、サーバー証明書、秘密鍵を登録する
  • OpenVPN は interfaces openvpn 配下で server mode として設定する
  • VPN クライアントから VNet への通信は forward で許可する
  • Azure NIC の IP 転送を有効にし、VNet 側に VPN クライアントネットワークへの戻り UDR を設定する
  • VPN 接続、経路、NSG、Firewall を別々に確認する

Azure と VyOS の責任分界

OpenVPN セッションが確立しても、Azure VNet 内へ到達できるとは限りません。受信経路と戻り経路の両方を確認します。

レイヤー役割確認すること
Azure Public IPインターネット側の入口VyOS NIC の IP 構成と関連付いているか
NSGAzure 側の受信制御UDP 1194 を必要な送信元から許可しているか
NIC IP 転送NVA としての転送VyOS の NIC で有効か
UDRVNet から VPN クライアントへの戻り経路次ホップが VyOS のプライベート IP か
VyOS inputOpenVPN 待受への通信許可WAN 側 NIC の UDP 1194 を許可しているか
VyOS forwardVPN と VNet 間の転送vtun10 から VNet を許可しているか

Marketplace イメージと初期設定を確認する

Marketplace イメージでは、DHCP、SSH、公開鍵、NTP などが初期設定に含まれることがあります。最初に実際のバージョンと設定を保存し、不要な設定を削除する場合も対象と影響を確認します。この記事では、通信追跡全体を消す delete system conntrack のような操作は行いません。

show version
show configuration commands
show interfaces
show ip route

証明書と鍵を PKI へ登録する

既存の CA、サーバー証明書、秘密鍵を使う場合は、VyOS の PKI にインポートします。ファイルは安全な経路で一時配置し、インポート後は不要な秘密鍵ファイルを残さないように扱います。

configure
run import pki ca vpn-ca file /config/auth/ca.crt
run import pki certificate vpn-server file /config/auth/server.crt
run import pki certificate vpn-server key-file /config/auth/server.key
run generate pki dh install vpn-dh
run generate pki openvpn shared-secret install vpn-tls-auth
commit
save

CA の秘密鍵は、クライアント証明書を別の安全な CA 環境で発行できるなら VyOS に置く必要はありません。VyOS には検証用 CA 証明書と、サーバー証明書・秘密鍵を登録します。

OpenVPN サーバーを設定する

OpenVPN は interfaces openvpn 配下で設定します。VPN クライアントにはトンネル用アドレスを払い出し、Azure VNet の宛先を push route で通知します。

configure
set interfaces openvpn vtun10 description 'Azure remote access VPN'
set interfaces openvpn vtun10 mode 'server'
set interfaces openvpn vtun10 protocol 'udp'
set interfaces openvpn vtun10 local-port '1194'
set interfaces openvpn vtun10 persistent-tunnel
set interfaces openvpn vtun10 server subnet '10.250.0.0/24'
set interfaces openvpn vtun10 server topology 'subnet'
set interfaces openvpn vtun10 server push-route '10.20.0.0/16'
set interfaces openvpn vtun10 tls ca-certificate 'vpn-ca'
set interfaces openvpn vtun10 tls certificate 'vpn-server'
set interfaces openvpn vtun10 tls dh-params 'vpn-dh'
set interfaces openvpn vtun10 tls auth-key 'vpn-tls-auth'
set interfaces openvpn vtun10 tls tls-version-min '1.2'
commit
save

クライアントごとの証明書を発行・登録した後は、VyOS からクライアント設定を生成できます。秘密鍵をどこで生成し保管するかは運用方針に合わせます。

generate openvpn client-config interface vtun10 ca vpn-ca certificate vpn-client01

VyOS Firewall を設定する

Public IP 宛ての UDP 1194 は Azure 側で VyOS NIC へ転送されるため、VyOS の受信インターフェイスでは通常 eth0 として見えます。既存の default drop より前に OpenVPN の許可を追加します。ルール番号は既存ポリシーに合わせて変更してください。

configure
set firewall ipv4 input filter rule 410 action 'accept'
set firewall ipv4 input filter rule 410 inbound-interface name 'eth0'
set firewall ipv4 input filter rule 410 protocol 'udp'
set firewall ipv4 input filter rule 410 destination port '1194'
set firewall ipv4 forward filter rule 420 action 'accept'
set firewall ipv4 forward filter rule 420 inbound-interface name 'vtun10'
set firewall ipv4 forward filter rule 420 destination address '10.20.0.0/16'
commit
save

戻り通信は established / related の許可ルールで通します。VPN クライアントから到達させる Azure サブネットやポートを限定できる場合は、forward ルールにも宛先とプロトコルを追加します。

Azure 側の設定を対応させる

  • VyOS NIC に Public IP を関連付ける
  • NSG で UDP 1194 を許可し、可能なら送信元アドレスを限定する
  • VyOS NIC の IP 転送を有効にする
  • 対象サブネットのルートテーブルに 10.250.0.0/24 宛て UDR を追加する
  • UDR の次ホップ種類を Virtual appliance、次ホップを VyOS のプライベート IP にする
  • Azure VM 側の OS Firewall と NSG が VPN クライアントネットワークを許可しているか確認する

VPN クライアントのアドレスを送信元 NAT すれば戻り UDR を省ける場合がありますが、接続元アドレスが見えなくなります。監査やアクセス制御を考えると、まず UDR で対称な経路を作る構成を検討します。

接続状態を順番に確認する

OpenVPN の待受、接続クライアント、VyOS の経路、Firewall、パケット到達を順に確認します。Azure 側では Network Watcher の Next Hop や IP Flow Verify も切り分けに使えます。

show openvpn server
show interfaces openvpn vtun10
show log openvpn interface vtun10
show ip route
show firewall ipv4 input filter
show firewall ipv4 forward filter
monitor traffic interface eth0 filter 'udp port 1194'
monitor traffic interface vtun10

接続できない場合の切り分け

症状確認する場所主な原因
UDP 1194 が届かないPublic IP、NSG、VyOS inputAzure 入口または受信 Firewall
TLS handshake が失敗するCA、証明書、秘密鍵、tls-authPKI 名や鍵の不一致
VPN 接続は成功するが VNet へ届かないpush route、VyOS forward、NIC IP 転送転送経路または許可不足
VNet VM まで届くが応答が戻らないUDR、VM の NSG、OS FirewallVPN クライアントネットワークへの戻り経路不足
一部通信だけ止まるMTU / MSS、PMTUDVPN オーバーヘッドによるパケットサイズ問題
再起動後に接続できないPKI 登録、設定保存、Public IP未保存設定または Azure 側関連付け

まとめ

Azure Marketplace の VyOS で OpenVPN を構成する場合、VyOS のサーバー設定と PKI だけでなく、Azure の Public IP、NSG、NIC IP 転送、UDR、戻り経路までが 1 つの通信経路になります。

VPN が接続できることと、Azure VNet 内のサービスへ到達できることは別の確認項目です。入口、TLS、トンネル、forward、戻り経路の順に確認すると、問題のあるレイヤーを特定しやすくなります。

関連する記事
VyOS Azure 版 OpenVPN – Marketplace イメージでリモートアクセス VPN を構成する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る