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 とします。アドレスと証明書名は環境に合わせて置き換えます。
書籍
VPN、Firewall、ルーティング、クラウドネットワーク設計の前提になる TCP/IP を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
この記事の結論
- 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 構成と関連付いているか |
| NSG | Azure 側の受信制御 | UDP 1194 を必要な送信元から許可しているか |
| NIC IP 転送 | NVA としての転送 | VyOS の NIC で有効か |
| UDR | VNet から VPN クライアントへの戻り経路 | 次ホップが VyOS のプライベート IP か |
| VyOS input | OpenVPN 待受への通信許可 | WAN 側 NIC の UDP 1194 を許可しているか |
| VyOS forward | VPN と 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
saveCA の秘密鍵は、クライアント証明書を別の安全な 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-client01VyOS 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 input | Azure 入口または受信 Firewall |
| TLS handshake が失敗する | CA、証明書、秘密鍵、tls-auth | PKI 名や鍵の不一致 |
| VPN 接続は成功するが VNet へ届かない | push route、VyOS forward、NIC IP 転送 | 転送経路または許可不足 |
| VNet VM まで届くが応答が戻らない | UDR、VM の NSG、OS Firewall | VPN クライアントネットワークへの戻り経路不足 |
| 一部通信だけ止まる | MTU / MSS、PMTUD | VPN オーバーヘッドによるパケットサイズ問題 |
| 再起動後に接続できない | PKI 登録、設定保存、Public IP | 未保存設定または Azure 側関連付け |
まとめ
Azure Marketplace の VyOS で OpenVPN を構成する場合、VyOS のサーバー設定と PKI だけでなく、Azure の Public IP、NSG、NIC IP 転送、UDR、戻り経路までが 1 つの通信経路になります。
VPN が接続できることと、Azure VNet 内のサービスへ到達できることは別の確認項目です。入口、TLS、トンネル、forward、戻り経路の順に確認すると、問題のあるレイヤーを特定しやすくなります。

