見出し画像

VPN接続中のVyOS(1.1.8)のIPアドレスをDHCPから固定IPアドレスに変更する

IPアドレスがDHCPで付与されているVPN接続中のVyOS(1.1.8)。このたび、IPアドレス設定を固定IPアドレスに変更する必要が生じたため、検証と設定を行ったお話です。


VyOSとは

オープンソースで開発されているネットワークOSです。ソフトウェアルータとして使用されることが多く、ファイアウォール、ルーティング、VPN、Proxyなどの機能を有しています。

今回のテーマと環境

インターネットVPNで対向のVPN装置とセッションを張っているVyOSがあります。このVyOS、対象のインタフェースのIPアドレスをDHCPサーバから所得しているのですが、要件が変更になり固定IPアドレスを設定する必要が発生しました。
インタフェースのIPアドレス設定をDHCPから固定アドレスに変更すること自体は容易ですが、インタフェースの設定変更が反映されるタイミングでDHCPで取得していたデフォルトゲートウェイが機能しなくなることが判明。
デフォルトゲートウェイを再設定するまで(設定の手際にもよりますが数秒~十数秒の間)、対向のVPN装置との通信が途切れしまうという問題が発生しました。 そこで今回は可能な限り通信が途切れない方法を目指したいと思います。

手順について

1. 概要

検証の結果、対向先VPN装置のIPアドレス向けのスタティックルートを事前に設定することで、対向VPN装置との通信が途切れる時間を最小に抑えることができました。

2. 流れ

具体的な設定としては以下になります。
 (1) 対向VPN装置のIPアドレス向けのルーティング設定
 (2) VyOSのインタフェース設定をDCHPから固定IPアドレスに変更
 (3) デフォルトゲートウェイを再設定
 (4) (1)で設定したスタティックルートを削除

~注意点~
(3) について。既存でデフォルトゲートウェイが設定されていても、(2) のタイミングでそれが機能しなくってしまいます。そのため、デフォルトゲートウェイの設定を一度削除してから再設定する必要がありました。

3. 実際の設定

(1) 対向VPN装置のIPアドレス向けのルーティング設定
ネクストホップとしてインターネット向けのIPアドレス(※)を設定します。
(※)大抵はDCHPで取得していたデフォルトゲートウェイのIPアドレスになるかと思います。

# set protocols static route [対向VPN装置のIPアドレス/32] next-hop '[デフォルトゲートウェイのIPアドレス]'
# commit

(2) VyOSのインタフェース設定をDCHPから固定IPアドレスに変更
この間にパケットロス(対向ネットワークに0.2秒間隔でpingを打つ)が1回発生。 今回の設定で唯一のパケットロスが発生するポイントです。

# delete interfaces ethernet [設定変更するIF] address 'dhcp'
# set interfaces ethernet [設定変更するIF] address '[設定したい固定IPアドレス/サブネットマスク]'
# set protocols static route [対向VPN装置のIPアドレス/32] next-hop '[デフォルトゲートウェイのIPアドレス]'
# commit

(3) デフォルトゲートウェイを再設定
今回の設定変更以前からデフォルトゲートウェイの設定がある場合でも DCHPから固定IPアドレスに設定変更したタイミングでそれが機能しなくなるので デフォルトゲートウェイの設定を一度削除してから再設定する必要があります。

・既存デフォルトゲートウェイ設定の削除
# delete protocols static route 0.0.0.0/0
# commit
・デフォルトゲートウェイ再設定
# set protocols static route 0.0.0.0/0 next-hop '[デフォルトゲートウェイのIPアドレス]'
# commit

(4) スタティックルートを削除
今回の作業向けに(1)で設定したスタティックルートを削除します。

# delete protocols static route '[対向VPN装置のIPアドレス/32]'
# commit

さいごに

今回の作業で対向のVPN装置との通信が途切れるタイミングをパケットロス1回(0.2秒間隔のping計測)に抑えることができました。これはインタフェースの設定変更→反映のタイミングで発生するポイントであることを考えると目的は達成されたのではないかと思います。

この記事が気に入ったらサポートをしてみませんか?