現在の状態では、Debianは起動後に手動で /usr/local/gogoc/bin/gogoc を起動しなければならないのですが、これを自動化したいと思います。
そこで、Debianの起動スクリプトを作ります。ここ(@IT)にあるのを雛形に、以下のようなファイルを作りました。
#!/bin/bash setip6tables() { ip6tables -P INPUT DROP ip6tables -P FORWARD DROP ip6tables -P OUTPUT ACCEPT ip6tables -F ip6tables -Z ip6tables -X ip6tables -N ufw6-after-forward ip6tables -N ufw6-after-input ip6tables -N ufw6-after-logging-forward : :(長いので中略) : ip6tables -A ufw6-before-output -m state --state RELATED,ESTABLISHED -j ACCEPT ip6tables -A ufw6-before-output -j ufw6-user-output ip6tables -A ufw6-skip-to-policy-forward -j DROP ip6tables -A ufw6-skip-to-policy-input -j DROP ip6tables -A ufw6-skip-to-policy-output -j ACCEPT ip6tables -A ufw6-track-output -p tcp -m state --state NEW -j ACCEPT ip6tables -A ufw6-track-output -p udp -m state --state NEW -j ACCEPT } clearip6tables() { ip6tables -P INPUT DROP ip6tables -P FORWARD DROP ip6tables -P OUTPUT DROP ip6tables -F ip6tables -Z ip6tables -X } start() { echo -e "Set ip6tables: " setip6tables echo -e "Starting gogoc Freenet6 client: " /usr/local/gogoc/bin/gogoc -y -f /usr/local/gogoc/bin/gogoc.conf -r 180 & return 0 } stop() { # killproc gogoc echo -e "Clear ip6tables: " clearip6tables return 0 } case "$1" in start) start ;; stop) stop ;; esac
本来なら、ip6tablesの設定はわけた方が良さそうな気もしますが、ここに含めています。
また、gogoc(Freenet6クライアント)の停止のしかたがわからないので、代わりにip6tablesで全てをDROPする設定をするようにしました。
このファイルを /etc/init.d/gogoclient として root で保存し、ファイル属性を 700 に変更します。そして起動時に呼ばれるようにするため、update-rc.dを使って設定します。
# sudo update-rc.d gogoclient start 99 2 3 4 5 .
update-rc.d: warning: /etc/init.d/gogoclient missing LSB information
update-rc.d: see
Adding system startup for /etc/init.d/gogoclient …
/etc/rc2.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc3.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc4.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc5.d/S99gogoclient -> ../init.d/gogoclient
#
再起動すると、自動的にFreenetに接続するようになります。なお、起動時はなぜか素直につながらないことが多いようですが、リトライするうちにつながるようです。
停止する際は、
# /etc/init.d/gogoclient stop
で全てのIPv6をブロックするようにip6tablesを設定変更します。