このブログでは何回か VRF について書きました。 FreeBSD の VRF、ubuntu の VRF など。 FreeBSD のポリシールーティングのネタも書いたこともありました。
そのとき CentOS7 はカーネルがまだ VRF に対応していなくて、CentOS8 まで VRF は実質利用できない状態だったのだけど、今の時代、AlmaLinux8 を利用すればカーネル的に VRF が利用できるので、試してみました。
ubuntu のネットワーク設定より Red Hat Linux 系のネットワーク設定のほうが楽と、いうか、個人的にも直感的に設定できるような状態ですしね(^^;;。今回は由緒正しく /etc/sysconfig/network-scripts/ 配下のファイルを用意して VRF の設定をしてみたいと思います。
と、いうことでまずは構成図などを。
基本的に FreeBSD の VRF も同じ構成で組んでいます。セグメントは全部で 3 個。
- Service-Segment: 外部からのアクセス用
- Access-Segment: MySQL とか SNMP とかバックヤード系
- mgmt: ssh でサーバにログインする用
今回のルーティングテーブルは合計二つ。Service-Segment と Access-Segment で一個のルーティングテーブル。 mgmt が VRF で設定するもう一個のルーティングテーブルになります。
FreeBSD で VRF するときに痛感したのですが、自分から出すパケットは default のルーティングテーブルからしか出ていきません。VRF で追加したルーティングテーブルの mgmt セグメントの 192.168.1.0/24 に ssh しようとしても default のルーティングテーブルから出ていきます。
例えば 192.168.52.201 で動作している MySQL にアクセスしようとした場合、default のルーティングテーブルから出ていくのですが Access-Segment で利用しているセグメントがローカルネットワークになっているのでそこから出ていきます。
MySQL サーバが 172.16.52.201 にあった場合、 default gateway の設定のある Service-Segment から出ていきますが、 MySQL のアクセスは Access-Segment から出ていきたいので route add -net 172.17.52.0/24 gw 192.168.52.1 とか Access-Segment にルーティング設定をしてあげる必要があります。
と、いうことで VRF を設定して本当に幸せになるのかよくわかりませんが、とりあえず設定して行ってみましょう。
上記の構成図に合わせて /etc/sysconfig/network-scripts/ にファイルを用意していきます。
ifcfg-eth0
ifcfg-eth1
ifcfg-eth2
ifcfg-vrf.eth2
route-vrf.eth2
route6-vrf.eth2
実際に中を見てみましょう。
Service-Segment: ifcfg-eth0
|
Service-Segmet に接続する eth0 には default gateway を設定しています。
Access-Segment: ifcfg-eth1
|
こちらは内部のアクセス用ネットワークなので、default gateway は設定していません。実際には route add -net でネットワークごとにルーティング情報を追加するんだろうなぁ。と、いう気配です。
mgmt: ifcfg-eth2
|
マネージメント用ネットワークで外部から ssh でログインするときに利用します。これが VRF を利用するインターフェースなので default gateway が設定してあります。でもって次のファイルも必要です。
mgmt-VRF: ifcfg-vrf.eth2
|
NAME= と VRF= で VRF で動作の設定です。ifconfig -a したときに mgmt0 というインターフェースが生えてきます。
mgmt-route-IPv4: route-vrf.eth2
|
VRF 側の IPv4 のルーティングテーブルの設定です。
mgmt-route-IPv6: route6-vrf.eth2
|
こちらが VRF 側の IPv6 のルーティングの設定。
で、これで準備ができたので一応再起動してみます。がっ!!
これがまた正しく動作しないのですよなぁ・・。 orz。
と、いうことで、追加で /etc/rc.local に設定を記載して、ちゃんど動作するようにコマンドを羅列します。 orz
|
最後の sysctl コマンドは /etc/sysctl.conf に記載しても良いですね。
問題はその上です。
上から順に、
- インターフェース mgmt0 を vrf として作成し table 10 とします
- インターフェース eth2 と mgmt0 をくっつけます
- table 10 (VRF 側) に default route を設定します
- default のルーティングテーブルが壊れているようなので default gateway を二回削除してからつけ直します (ほんとうにこれしないとダメだった・・orz)
ルーティングの情報は IPv4 と IPv6 両方で実施します。これで大丈夫みたい。
確認方法は以下です。
|
なんか良さげな感じがしています。
192.168.22.1 から eth2 のアドレスに対してアクセスした場合、戻りパケットはちゃんと eth2 から出ていきます。 19.268.1.50 から eth0 のアドレスに対してアクセスした場合、ちゃんと eth0 から戻っていきます。ある意味 VRF が機能している。と、いう感じです。やりたかったことはこれですね。
ただ、自分から出ていくパケットについてが問題です。default のルーティングテーブルから出ていくのが基本で、別のルーティングテーブルを利用したい場合は ping -I eth2 192.168.1.40 みたいにインターフェースを指定する必要があります。明示的にコマンドを打つなら良いですが、例えば php から MySQL にアクセスするために VRF 側のルーティングテーブルを利用して外に出ていきたい。などというのはほぼ不可能です。
使い方が非常に限られる VRF ですが、機能的には一応、動作する。と、いうことですなぁ。
さてと。今回構築したこの AlmaLinux release 8.7 の環境ですが、もうしばらく利用したいと思います。次のエントリは今回作成した環境を利用します。が、直接的・動作的には全く関係ないですが、好ご期待;-)。