宅内ルーティングOSPF化とOpenVPN tunのアドバタイズ

勉強がてら、自宅ネットワークのルーティング設定をダイナミックルーティングに変更しましたので備忘録として記載しておきます。

小規模なネットワークなのでダイナミックルーティングは全く不要と思います。単なる物好きというやつです。

ルーティングプロトコルにはOSPFを利用しました。
10数年前にはRIP=小規模、OSPF=大規模向けと定義されていたかと思いますが、現在では基本OSPFを利用、というトレンドなんですね。ルータの処理能力が向上したからでしょうか。

構成

図解しないと理解不能になってしまうので、記載しておきます。

当方では2拠点がヤマハのルータでVPN接続されており、各々の拠点にDMZ/LANの2セグメントが存在しています。
そして拠点②にはこちらの記事にて解説したOpenVPNコンテナが稼働しています。モバイル端末からの接続を想定しtunモードになっているので、クライアント格納用のセグメントが別途存在しています。

つまり、RTX1200/RTX1100とOpenVPNコンテナの3台が協調動作し、合計5セグメントのルーティングを構成することになります。

IP情報はマスキングしています。適宜読み替えてください。

ヤマハRTX設定

OSPF設定ガイド

上記などを参照しつつ、簡単に設定できました

  • 拠点①側 (RTX1200)
    ospf use on
    ospf router id 192.168.B.1
    ospf area backbone
    
    ip lan1 ospf area backbone
    ip lan2 ospf area backbone
    
    tunnel select 1
     ip tunnel ospf area backbone cost=10
    
  • 拠点②側 (RTX1100)
    ospf use on
    ospf router id 192.168.Y.1
    ospf area backbone
    
    ip lan1 ospf area backbone
    ip lan2 ospf area backbone
    
    tunnel select 1
     ip tunnel ospf area backbone cost=10
    

コスト値を指定しないと、tunnelインタフェーズデフォルトの1562(64kbps)が指定されてしまいますので明示的にコスト値を付けるようにしました。

なお全ポートをOSPFエリアにする必要はないのですが、どうやらRTXではConnectインタフェースをアドバタイズすることができない?らしく、エリアに含めることにしました。

28.13 指定インタフェースの OSPF エリア設定

設定変更が終わったら ospf configure refresh の実行を忘れずに。

OpenVPNサーバ(コンテナ)設定追加

OSPFが喋れるように、OpenVPNコンテナにquaggaをインストールします。

Quaggaを使ってLinuxサーバで動的ルーティング - 元RX-7乗りの適当な日々
Quaggaは、UNIX/Linuxプラットフォームで動くルーティングソフトウェアです。 OSPF、BGP、RIP等のプロトコルが実装されていて、GNU Zebraから派生したソフトウェアだとか。 某所の環境が、ロードバランサを設置(という...
# yum install quagga

/etc/quagga以下にzebra.confとospfd.confを設置します。
ospfd.confの内容は以下のような感じ。

hostname openvpn
password (パスワード)
log stdout
!
!
!
interface eth0
!
interface lo
!
interface tun0
!
router ospf
 ospf router-id 192.168.X.4
 network 192.168.X.0/24 area 0.0.0.0
 network 192.168.Z.0/24 area 0.0.0.1
 area 0.0.0.1 range 192.168.Z.2/32 substitute 192.168.Z.0/24
!
line vty
!

通常であれば上記リンク先の記事のように
# redistribute connected
としてConnectインタフェースをアドバタイズすれば良いのですが、OpenVPNのtun0はちょっと特殊で32bitネットマスクのNICが接続されているため、そのままではうまくいきません。

[root@openvpn quagga]# ifconfig tun0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 192.168.Z.1  netmask 255.255.255.255  destination 192.168.Z.2
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 1064  bytes 74850 (73.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10485  bytes 978528 (955.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

以下の記事を参考にアドバタイズ情報を24bitで代替することに成功しました。

OSPF: how to advertise the subnet of an OpenVPN server?
I have successfully configured OSPF on all of our HP ProCurve 7102 routers, and most of our internal Linux routers. Rout...

最後にサービス起動、自動起動を有効化し終了です。

# systemctl enable zebra
# systemctl enable ospfd
# systemctl start zebra
# systemctl start ospfd

動作確認

ヤマハルータ側の確認結果

  • 拠点①側 (RTX1200)
    # show status ospf neighbor
    Neighbor ID     Pri   State           Dead Time   Address         Interface
    192.168.Y.1       0   FULL/  -        00:00:31    192.168.Y.1     TUNNEL[1]
    
    # show ip route
    宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
    default             -                    PP[01]    static
    192.168.A.0/24      192.168.A.1            LAN2  implicit
    192.168.X.0/24      192.168.Y.1       TUNNEL[1]      OSPF     cost=11
    192.168.B.0/24      192.168.B.1            LAN1  implicit
    192.168.Y.0/24      192.168.Y.1       TUNNEL[1]      OSPF     cost=11
    192.168.Z.0/24      192.168.Y.1       TUNNEL[1]      OSPF     cost=21
    
  • 拠点②側 (RTX1100)
    # show status ospf neighbor
    Neighbor ID     Pri   State           Dead Time   Address         Interface
    192.168.X.4       1   FULL/DR         00:00:37    192.168.X.4     LAN1
    192.168.B.1       0   FULL/  -        00:00:38    192.168.B.1     TUNNEL[1]
    
    # show ip route
    宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
    default             ***.***.***.***        LAN3    static
    192.168.A.0/24      192.168.B.1       TUNNEL[1]      OSPF     cost=11
    192.168.X.0/24      192.168.X.1            LAN1  implicit
    192.168.B.0/24      192.168.B.1       TUNNEL[1]      OSPF     cost=11
    192.168.Y.0/24      192.168.Y.1            LAN2  implicit
    192.168.Z.0/24      192.168.X.4            LAN1      OSPF     cost=11

無事動作しました。

コメント