我正在尝试设置一个DHCP中继代理,用于中继IPv4和IPv6的DHCP请求。 我正在使用CentOS 6.2,并使用ISC DHCP实现中的dhcrelay 。 我想将其设置为服务,但是dhcrelay的手册页声明:
-6 Run dhcrelay as a DHCPv6 relay agent. Incompatible with the -4 option. -4 Run dhcrelay as a DHCPv4/BOOTP relay agent. This is the default mode of operation, so the argu- ment is not necessary, but may be specified for clarity. Incompatible with -6.
看来, -6和-4选项是不相容的。 在两种情况下,我怎样才能使这两个协议的工作没有滚动我自己的服务包装?
这是服务脚本( /etc/init.d/dhcrelay ):
#!/bin/sh # ### BEGIN INIT INFO # Provides: dhcrelay # Default-Start: # Default-Stop: # Should-Start: # Required-Start: $network # Required-Stop: # Short-Description: Start and stop the DHCP relay server # Description: dhcrelay provides the Dynamic Host Configuration Protocol (DHCP) # relay server. This is required when your DHCP server is on # another network segment from the clients. ### END INIT INFO # # The fields below are left around for legacy tools (will remove later). # # chkconfig: - 65 35 # description: dhcrelay provides a relay for Dynamic Host Control Protocol. # processname: dhcrelay # # pidfile: /var/run/dhcrelay.pid . /etc/rc.d/init.d/functions RETVAL=0 prog=dhcrelay exec=/usr/sbin/dhcrelay lockfile=/var/lock/subsys/dhcrelay pidfile=/var/run/dhcrelay.pid config=/etc/sysconfig/dhcrelay # The dhcrelay daemon uses the sysconfig file for configuration information. # There is no native configuration file for this program and you must specify # its settings on the command line. [ -f /etc/sysconfig/dhcrelay ] && . /etc/sysconfig/dhcrelay configtest() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 [ -z "$DHCPSERVERS" ] && exit 6 return 0 } rh_status() { status $exec } rh_status_q() { rh_status >/dev/null 2>&1 } start() { [ `id -u` -eq 0 ] || exit 4 [ -x $exec ] || exit 5 [ -f $config ] || exit 6 rh_status_q && return 0 echo -n $"Starting $prog: " daemon $exec $DHCRELAYARGS $([ -n "$INTERFACES" ] && for int in $INTERFACES ; do echo -n " -i $int" ; done) $DHCPSERVERS 2>/dev/null RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { [ `id -u` -eq 0 ] || exit 4 rh_status_q || return 0 echo -n $"Shutting down $prog: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } usage() { echo $"Usage: $0 {start|stop|restart|force-reload|condrestart|try-restart|configtest|status}" } if [ $# -gt 1 ]; then exit 2 fi case "$1" in start) start ;; stop) stop ;; restart|force-reload) stop ; start ;; condrestart|try-restart) rh_status_q || exit 0 stop ; start ;; reload) usage # unimplemented feature exit 3 ;; configtest) configtest ;; status) rh_status ;; *) usage exit 2 ;; esac exit $?
和etc/sysconfig/dhcrelay :
DHCRELAYARGS="-4 153.5.240.2" # DHCPv4 only INTERFACES="" # DHCPv4 only DHCPSERVERS=""
你必须为一个额外的IPv6中继做一个新的init脚本。 但这并不难。
将/etc/init.d/dhcrelay复制到/etc/init.d/dhcrelay6
编辑/etc/init.d/dhcrelay6到
#!/bin/sh # ### BEGIN INIT INFO # Provides: dhcrelay6 # Default-Start: # Default-Stop: # Should-Start: # Required-Start: $network # Required-Stop: # Short-Description: Start and stop the DHCP relay server # Description: dhcrelay provides the Dynamic Host Configuration Protocol (DHCP) # relay server. This is required when your DHCP server is on # another network segment from the clients. ### END INIT INFO # # The fields below are left around for legacy tools (will remove later). # # chkconfig: - 65 35 # description: dhcrelay provides a relay for Dynamic Host Control Protocol for IPv6. # processname: dhcrelay6 # # pidfile: /var/run/dhcrelay6.pid . /etc/rc.d/init.d/functions RETVAL=0 prog=dhcrelay6 exec=/usr/sbin/dhcrelay6 lockfile=/var/lock/subsys/dhcrelay6 pidfile=/var/run/dhcrelay6.pid config=/etc/sysconfig/dhcrelay6 # The dhcrelay daemon uses the sysconfig file for configuration information. # There is no native configuration file for this program and you must specify # its settings on the command line. [ -f /etc/sysconfig/dhcrelay6 ] && . /etc/sysconfig/dhcrelay6 configtest() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 [ -z "$DHCPSERVERS" ] && exit 6 return 0 } rh_status() { status $exec } rh_status_q() { rh_status >/dev/null 2>&1 } start() { [ `id -u` -eq 0 ] || exit 4 [ -x $exec ] || exit 5 [ -f $config ] || exit 6 rh_status_q && return 0 echo -n $"Starting $prog: " daemon $exec -6 $DHCRELAYARGS $([ -n "$LOWER" ] && for int in $LOWER; do echo -n " -l $int" ; done) $([ -n "$UPPER " ] && for int in $UPPER ; do echo -n " -u $int" ; done) 2>/dev/null RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { [ `id -u` -eq 0 ] || exit 4 rh_status_q || return 0 echo -n $"Shutting down $prog: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } usage() { echo $"Usage: $0 {start|stop|restart|force-reload|condrestart|try-restart|configtest|status}" } if [ $# -gt 1 ]; then exit 2 fi case "$1" in start) start ;; stop) stop ;; restart|force-reload) stop ; start ;; condrestart|try-restart) rh_status_q || exit 0 stop ; start ;; reload) usage # unimplemented feature exit 3 ;; configtest) configtest ;; status) rh_status ;; *) usage exit 2 ;; esac exit $?
将/etc/sysconfig/dhcrelay复制到/etc/sysconfig/dhcrelay
编辑/etc/sysconfig/dhcrelay即可
DHCRELAYARGS="" # Downstream interfaces (Clients) LOWER="" # Upstream interfaces (Servers) UPPER=""
执行
ln -s /usr/sbin/dhcrelay /usr/sbin/dhcrelay6
这是必要的,所以服务可以独立于IPv4中继,因为它不使用PID文件并且被基名称阻止。
这是没有testing,因为我没有安装CentOS,但它应该工作。 联系我,如果没有,我们会解决。
你不需要做二进制链接。 你说“它不使用PID文件” – 那么为什么init脚本中指定的pid文件呢?
实际上, dhcprelay守护程序为ipv4模式生成一个pid文件,为ipv6模式生成一个不同的pid文件,因此您只需在每个init脚本中指定正确的pid文件,并启动和停止守护进程的每个实例(ipv4 &ipv6)将正常工作。