LoginSignup
23
24

macOSでStatic Routeの永続化

Last updated at Posted at 2020-07-21

環境

macOS Catalina(10.15.5)

はじめに

macOSでStatic Routeを設定するのにroute addコマンドを使用します。
例)デフォルトゲートウェイが100.1.2.254であるネットワークで
10.0.0.0/8を192.168.1.254のルータに向ける場合

#Static Routeの追加
$ sudo route add -net 10.0.0.0/8 192.168.1.254
#ちなみに削除する場合は以下
$ sudo   route delete -net 10.0.0.0/8 192.168.1.254
#確認
$ netstat -rn
default            100.1.2.254        UGSc           en0       
10                 192.168.1.254       UGSc           en0 

しかし、再起動すると追加したStatic Routeは消えてしまいます。

ネットワーク設定の永続化のためにWindowsは-Pオプション、ubuntuだとnetplanに書くなどして対処しますが、macOSはありません(ガーン)。スクリプトで対応とかダサい。

networksetupコマンド

ではどうするかというと、networksetup -setadditionalroutesで設定できます。

一旦ヘルプを見ます

$ networksetup --help | grep setadditionalroute
networksetup -setadditionalroutes <networkservice> [ <dest> <mask> <gateway> ]*

設定にはnetworkservice名が必要なので調べます。これもnetworksetupコマンドでできます。

$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Wi-Fi
Bluetooth PAN
Thunderbolt Bridge

無線LANのnetworkservice名は「Wi-Fi」ということがわかりました。

ルーティングを追加

さきほどrouteコマンドで設定したものと同じルーティングを追加します。
これは再起動でも消えません。
例)デフォルトゲートウェイが100.1.2.254であるネットワークで
10.0.0.0/8を192.168.1.254のルータに向ける

$ networksetup -setadditionalroutes Wi-Fi 10.0.0.0 255.0.0.0 192.168.1.254
#netstatで確認
$ netstat -rn | grep 10
default            100.1.2.254        UGSc           en0       
10                 192.168.1.254       UGSc           en0

削除する場合

networkserviceに引数をつけないと、今まで設定した静的ルーティングが削除されます。

$ networksetup -setadditionalroutes Wi-Fi

注意点

ここで注意点ですが、networksetup -setadditionalroutesは一番最新のコマンドが優先されます。
例えば、以下のように連続して異なるルーティングの設定をしてしまうと後の172.16.0.0しか有効になりません。

$ networksetup -setadditionalroutes Wi-Fi 10.0.0.0 255.0.0.0 192.168.1.254
$ networksetup -setadditionalroutes Wi-Fi 172.16.0.0 255.255.0.0 192.168.2.254
##確認(172.16.0.0のルーティングしか追加されていない)
netstat -rn | grep 192.168
172.16             192.168.2.254      UGSc           en0

複数のルーティングを設定する場合

ヘルプで見てみると複数のルーティングが設定できることがわかります。

$ networksetup -setadditionalroutes <networkservice> [ <dest> <mask> <gateway> ]*
$ networksetup -setadditionalroutes Wi-Fi 10.0.0.0 255.0.0.0 192.168.1.254 172.16.0.0 255.255.0.0 192.168.2.254
## 確認(複数のルーティングが追加された)
netstat -rn | grep 192.168
10                 192.168.1.254      UGSc           en0       
172.16             192.168.2.254      UGSc           en0

の文字列を複数列挙する必要があります。
ヘルプのように配列リテラルのように記載してもNGです。

### 以下はNGの例です。
$ networksetup -setadditionalroutes Wi-Fi [172.16.0.0 255.255.0.0 192.168.2.254] [10.0.0.0 255.0.0.0 192.168.2.254]
zsh: bad pattern: [172.16.0.0

また、CIDR表記(10.0.0.0/8)のようにしたい場合もNGになります。

###これはsyntax errorとなります
$ networksetup -setadditionalroutes Wi-Fi 10.0.0.0/8 192.168.2.254
Route syntax: <dest> <mask> <gateway>

参考

networksetupコマンドの使い方:ヘルプのみかた
Mac OS Xのターミナル上でWi-Fiの設定を追加・削除する

23
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
24