LoginSignup
0
0

More than 3 years have passed since last update.

静的ルーティング(static routing)をsystemdのservice unitで設定してみた

Last updated at Posted at 2019-05-01

概要

「Firewall内のサーバ・プライベートネットワークにVPN接続」により、2つのprivate network(自宅と職場)をvpn常時接続した。その際に、相手方のprivate networkへのstatic routeを設定してあげる必要があり、/etc/network/if-up.d/でルーティング設定を行うと、問題なく設定されるが、networking.serviceがfailedとなってしまう。実行のタイミングの問題のようだが、コントロールできないため気持ち悪いのでsystemdで設定した。慣れれば?、systemdは便利。

環境

  • vpn接続したDebian server (stretch)
  • private networkは、192.168.1.0/24と192.168.32.0/24
  • 以下の例は、192.168.1.0/24側のサーバ設定。
  • gatewayはvps上の仮想ルータに設定している(詳細はここでは述べません)。

やっていること

192.168.1.0/24のマシンから192.168.32.0/24のマシンに接続するために、

sudo /sbin/route add -net 192.168.32.0/24 gw 192.168.1.200

を起動時にしているだけなんですが。。。vpnbridge.serviceが立ち上がってから自動的に実行するとなると、タイミングの問題があり、結構ハマりました。

systemd unitの設定

/etc/systemd/system/static-route.service
[Unit]
Description=static route to target network
After=network.target network-online.target vpnbridge.service
[Service]
Type=oneshot
ExecStart=/root/static-route start
ExecStop=/root/static-route stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
  • vpnbridgeが起動していなければ、ルーティングしても意味がないので、vpnbridge.serviceをAfterに設定。
  • Type=oneshot, RemainAfterExit=yesとしないと、起動時にstopされます。daemonではないので、一回だけstartを実行してactiveとする必要があります。
  • Execを/root/に置くのはどうかとも思いましたが、汎用性に劣るスクリプトなのでとりあえず。/usr/local/等に置くほどのものでもないので。

static routingの起動・停止スクリプト

/root/static-route.conf例
NAME_TARGET='target_domain_name'
TARGET='192.168.32.0/24'
GATEWAY='192.168.1.200'
#!/bin/sh -e
# static routing to NAME_TARGET of TARGET
SCRIPT='static-route'

. /root/static-route.conf

help(){
        echo "$SCRIPT start, stop: routing to $NAME_TARGET"
}

case $1 in
        'start') CMD='add';;
        'stop' ) CMD='delete';;
        *) help; exit;;
esac

### routing to TARGET
ROUTE="/sbin/route ${CMD} -net ${TARGET} gw ${GATEWAY}"
echo $ROUTE
$ROUTE

  • journalctlでの確認のために、echo $ROUTEで実行コマンドを記録していますが、コメントアウトしても可。
root@altair:~# journalctl -u static-route
-- Logs begin at Wed 2019-05-01 08:57:21 JST, end at Wed 
 5月 01 11:32:12 altair systemd[1]: Starting static route to target...
 5月 01 11:32:12 altair static-route[2359]: /sbin/route add -net 192.168.32.0/24 
 5月 01 11:32:12 altair systemd[1]: Started static route to target.

今日から令和です。

参考

第10章 SYSTEMD によるサービス管理

0
0
0

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
0
0