複数 IP を持つ FreeBSD 13.1 でスタティックルートを設定してルーターとして動作させる方法
前書き
我が家では FreeBSD をインストールしたパソコンを 2 つのネットワークの境界に設置している。
言い換えると、この FreeBSD はネットワーク A とネットワーク B に繋がっているわけだ。
- ネットワーク A = 10.1.0.0/24
- ネットワーク B = 10.2.0.0/24
で、FreeBSD には 10.1.0.101 と 10.2.0.101 の IP アドレスが設定されている。ここまでが前提のお話である。
ここから例えば、ネットワーク B のパソコンから、ネットワーク A のサーバーに通信させたい場合、FreeBSD をルーターとして動作させることで実現可能だ。
ルーターとして動作するためにはルーティングできる必要がある。ルーティングとは、ネットワーク B から来たパケット (通信) をネットワーク A (またはこの逆) に転送する機能のことだ。
FreeBSD はこの転送機能 (つまりルーティング機能) がデフォルトでは OFF になっている。
このため、まず [1] ルーティング機能を ON にすることと、[2] 具体的にどこの IP アドレス宛の通信を転送させるかの設定 (スタティックルートの設定) が必要になる。(細かく言えばダイナミックルーティングというものもあるがそれについては触れない)
本投稿は [1] と [2] の方法について書いていく。
[1] ルーティング機能を ON にする
/etc/rc.conf に
gateway_enable=”YES”
の 1 行を記載する。
これだけで設定は完了だが、動作として反映させるためにカーネルの設定 (net.inet.ip.forwarding) を変更する。
% sysctl -a net.inet.ip.forwarding
net.inet.ip.forwarding: 0
%
0 はルーティングが動作しないことを意味するのでこれを 1 に変更する。
% sudo sysctl -w net.inet.ip.forwarding=1 net.inet.ip.forwarding: 0 -> 1 % sysctl -a net.inet.ip.forwarding net.inet.ip.forwarding: 1 %
1 に変更できた。
[2] スタティックルートを追加する
スタティックルートを設定するのに必要な情報は 2 つだ。
- 宛先 IP アドレス
- ネクストホップ
「宛先 IP アドレス」で、どこの IP アドレス宛の通信経路を追加するのかを指定し、そこ宛の通信を誰に渡すかを IP アドレスで定義するのがネクストホップだ。
以下の例では、172.16.1.0/24 宛のパケットは 10.1.0.1 の IP アドレス (これは我が家のヤマハルーター) に転送するように設定している。
% sudo route add -net 172.16.1.0/24 10.1.0.1
%
netstat -rn でルーティングテーブルを確認する。
% netstat -rn Routing tables Internet: Destination Gateway Flags Netif Expire default 10.2.0.254 UGS re0.102 10.1.0.0/24 link#3 U re0.101 10.1.0.101 link#3 UHS lo0 10.2.0.0/24 link#4 U re0.102 10.2.0.101 link#4 UHS lo0 127.0.0.1 link#2 UH lo0 172.16.1.0/24 10.1.0.1 UGS re0.101 Internet6: Destination Gateway Flags Netif Expire ::/96 ::1 UGRS lo0 ::1 link#2 UHS lo0 ::ffff:0.0.0.0/96 ::1 UGRS lo0 fe80::/10 ::1 UGRS lo0 fe80::%lo0/64 link#2 U lo0 fe80::1%lo0 link#2 UHS lo0 ff02::/16 ::1 UGRS lo0 %
上記青字の箇所が追加されたことが確認できる。
これで FreeBSD は 172.16.1.0/24 宛のパケットを受け取ると、10.1.0.1 に転送するように動作する。