Добрый день, уважаемые пользователи Тостера.
Имеется Raspberry Pi 3 B+ с установленной Raspbian и белым статическим адресом за маршрутизатором. Мне необходимо использовать микрокомпьютер как SOCKS5 прокси сервер. Установил и сконфигурировал Danted, включил его автозапуск, но после перезагрузки системы при выполнении
sudo systemctl status danted
получаю ошибку:
Ошибка15:36:47 raspberrypi systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)...
янв 09 15:36:47 raspberrypi danted[385]: Jan 9 15:36:47 (1547037407.546203) danted[385]: warning: int_ifname2sockaddr(): interface "eth0" has no usable IP-addresses configured
янв 09 15:36:47 raspberrypi danted[385]: Jan 9 15:36:47 (1547037407.551843) danted[385]: error: /etc/danted.conf: problem on line 6 near token "eth0": could not resolve hostname "eth0": Temporary failure in name resolution.
янв 09 15:36:47 raspberrypi danted[385]: Jan 9 15:36:47 (1547037407.551956) danted[385]: alert: mother[1/1]: shutting down
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Control process exited, code=exited status=1
янв 09 15:36:47 raspberrypi systemd[1]: Failed to start SOCKS (v4 and v5) proxy daemon (danted).
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Unit entered failed state.
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Failed with result 'exit-code'.
Если после этого выполнить
sudo systemctl restart danted
, то сервис прекрасно запускается и работает.
Как я понял, ошибка случается из-за того, что Danted запускается быстрее, чем поднимается интерфейс на Малинке. Я попробовал добавить параметр
sleep 30
, но это не дало желаемого эффекта: после перезагрузки системы по-прежнему ошибка.
Код конфигов прикрепляю:
/etc/danted.conf# $Id: sockd.conf,v 1.52.10.2 2014/09/03 14:49:13 michaels Exp $
logoutput: stderr
internal: 0.0.0.0 port = 7777
external: eth0
socksmethod: username
user.privileged: root
user.unprivileged: nobody
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
log: error
socksmethod: username
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error
socksmethod: username
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: error
}
/etc/init.d/danted#! /bin/sh
### BEGIN INIT INFO
# Provides: danted
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
# Description: Starts or stops the Dante SOCKS proxy daemon.
# Its configuration is stored in the /etc/danted.conf file;
# see the danted.conf(5) manual page for details.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
. /lib/lsb/init-functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/danted
NAME=danted
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf
test -f $DAEMON || exit 0
set -e
# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
sleep 30
if [ -r $CONFFILE ]; then
uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
if [ -n "$uid" ]; then
touch $PIDFILE
chown $uid $PIDFILE
fi
fi
}
case "$1" in
start)
if ! egrep -cve '^ *(#|$)' \
-e '^(logoutput|user\.((not)?privileged|libwrap)):' \
$CONFFILE > /dev/null
then
echo "Not starting $DESC: not configured."
exit 0
fi
echo -n "Starting $DESC: "
<b>sleep 30</b>
touch_pidfile
start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE \
--exec $DAEMON -- -D
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
--exec $DAEMON
echo "$NAME."
;;
reload|force-reload)
#
# If the daemon can reload its config files on the fly
# for example by sending it SIGHUP, do it here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this a do-nothing entry.
#
echo "Reloading $DESC configuration files."
start-stop-daemon --stop --signal 1 --quiet --pidfile \
$PIDFILE --exec $DAEMON -- -D
;;
restart)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
sleep 1
touch_pidfile
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON -- -D
echo "$NAME."
;;
status)
if ! egrep -cve '^ *(#|$)' \
-e '^(logoutput|user\.((not)?privileged|libwrap)):' \
$CONFFILE > /dev/null
then
configured=''
else
configured='1'
fi
if start-stop-daemon --status --quiet --pidfile $PIDFILE \
--exec $DAEMON; then
if [ -n "$configured" ]; then
echo "$DESC running"
else
echo "$DESC running, yet not configured?!"
fi
else
if [ -n "$configured" ]; then
echo "$DESC not running"
else
echo "$DESC not configured"
fi
fi
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
Буду благодарен за помощь. Заранее спасибо!