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

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

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

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

構成

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

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

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

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

ヤマハRTX設定

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

  • 拠点①側 (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インタフェースをアドバタイズすることができない?らしく、エリアに含めることにしました。

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

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

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

Quaggaは、UNIX/Linuxプラットフォームで動くルーティングソフトウェアです。 OSPF、BGP、RIP等のプロトコ..
# 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で代替することに成功しました。

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

# 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

無事動作しました。