#author("2017-04-16T13:06:11+09:00","default:nowsky","nowsky")
*radvd [#i70c360a]
[[IPv6 Router Advertisement Daemon:+http://www.litech.org/radvd/]]
IPv6で必要となるルータ広告を行う為のLinuxDaemon。
LinuxサーバをIPv6ルータとして動作させる時に利用する事が多い。
Raspberry PiをIPv6実験環境として利用したい場合には重宝する。
~
*インストール [#j1312bcf]
&size(16){&font(b){1. ビルド・インストール};};
radvdは細かいオプションを付与しなくてもビルドは成功する。
今回はインストール先を分離する為にprefixのみ付与しておく。
 $ tar zxvf radvd-2.16.tar.gz
 $ cd radvd-2.16
 $ ./configure --prefix=/usr/local/radvd-2.16
 $ make
 $ make install
 $ cd /usr/local
 $ ln -s /usr/local/radvd-2.16 radvd
 $ cd /etc
 $ ln -s /usr/local/radvd/etc radvd
~
&size(16){&font(b){2. 起動オプションの設定};};
radvdを起動させる為のユーザ指定を行う。
chroot環境として動かす場合は、下記ファイルを書き換える事でchroot化出来る。
 # vi /etc/default/radvd
 --------------------------------------------------
 # No chroot; /var/run/radvd must be owned by -u.
 OPTIONS="-u radvd"
 
 # Chroot; directory structure under /var/chroot/radvd has to be populated.
 #OPTIONS="-u radvd -t /var/chroot/radvd"
~
&size(16){&font(b){3. 起動スクリプトの作成};};
Redhatの場合は、&font(b){"SOURCE/redhat/radvd.init"};をOS指定ディレクトリにコピーすれば良い。
Debianの場合は下記ファイルの様に、一部を改変する必要がある。
 $ vi /etc/init.d/radvd
 --------------------------------------------------
 #!/bin/sh
 #
 # radvd           radvd is the router advertisement daemon for IPv6.
 #
 ### BEGIN INIT INFO
 # Provides:       radvd
 # Required-Start: $network $remote_fs $syslog
 # Required-Stop:  $network $remote_fs $syslog
 # Default-Start:  2 3 4 5
 # Default-Stop:
 # Short-Description: Router Advertisement Daemon for IPv6
 ### END INIT INFO

 # Source function library.
 . /lib/lsb/init-functions
 
 [ -f /etc/default/radvd ] && . /etc/default/radvd
 
 RETVAL=0
 PROG="radvd"
 LOCKFILE=/var/lock/subsys/radvd
 
 # See how we were called.
 case "$1" in
     start)
         if [ ! -f /etc/radvd/radvd.conf ]; then
                 echo $"Configuration file /etc/radvd/radvd.conf missing" 1>&2
                 exit 6
         fi
         if [ `id -u` -ne 0 ]; then
                 echo $"Insufficient privilege" 1>&2
                 exit 4
         fi
         echo -n $"Starting $PROG: "
         /usr/local/radvd/sbin/radvd $OPTIONS
         RETVAL=$?
         echo
         if [ $RETVAL -eq 0 ]; then
                 touch $LOCKFILE
         else
                 if [ -f $LOCKFILE ]; then
                         RETVAL=0
                 fi
         fi
         ;;
 
     stop)
         echo -n $"Stopping $PROG: "
         killproc radvd
         RETVAL=$?
         echo
         [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
         ;;
 
     restart)
         $0 stop
         $0 start
         RETVAL=$?
         ;;
 
     reload|force-reload)
         echo -n $"Reloading $PROG: "
         killproc radvd -HUP
         RETVAL=$?       
         echo
         ;;
 
     condrestart|try-restart)
         if [ -f $LOCKFILE ]; then
                 $0 stop
                 $0 start
                 RETVAL=$?
         fi
         ;;
 
     *)
         echo $"Usage: $0 {start|stop|restart|try-restart|reload|force-reload}"
         exit 2
 esac
 
 exit $RETVAL
~
&size(16){&font(b){4. 起動準備};};
実行ユーザ作成と、iptablesのフィルタリング解除を行う。
クライアントからRAへ通信を行うには、下記のICMPv6パケットを通す必要がある。
 ・iptables開放
 ==================================================
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request           -j ACCEPT
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply             -j ACCEPT
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation    -j ACCEPT
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement   -j ACCEPT
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation  -j ACCEPT
 # ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT

 ・実行ユーザ、グループ作成
 ==================================================
 $ groupadd radvd
 $ useradd -g radvd -d /var/run/radvd -s /usr/sbin/nologin radvd

 ・起動スクリプト登録
 ==================================================
 $ chmod 755 /etc/init.d/radvd
 $ systemctl enable radvd
~
&size(16){&font(b){5. コンフィグ作成};};
-[[radvd.conf - Linux man page:+https://linux.die.net/man/5/radvd.conf]]