181 lines
5.3 KiB
Bash
Executable File
181 lines
5.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
PPTPD=/usr/sbin/pptpd
|
|
PIDFILE="/var/run/pptpd.pid"
|
|
PPTPD_CONF="/etc/ppp/pptpd.conf"
|
|
OPTIONS_PPTPD="/etc/ppp/options.pptpd"
|
|
VPN_CONF="/etc/config/vpn.conf"
|
|
|
|
DBG="nodebug"
|
|
if [ "x$2" == "xdebug" ]; then
|
|
DBG="debug"
|
|
fi
|
|
|
|
init_pptp_modules()
|
|
{
|
|
/bin/echo "init insmod and mknod"
|
|
[ -c /dev/ppp ] || /bin/mknod --mode=644 /dev/ppp c 108 0
|
|
[ -d /etc/config/ppp ] || mkdir -p /etc/config/ppp
|
|
[ -L /etc/ppp ] || /bin/ln -sf /etc/config/ppp /etc/ppp
|
|
/bin/echo "1" > /proc/sys/net/ipv4/ip_forward
|
|
[ -L /etc/ppp/ip-up ] || /bin/ln -sf /sbin/nasutil /etc/ppp/ip-up
|
|
[ -L /etc/ppp/ip-down ] || /bin/ln -sf /sbin/nasutil /etc/ppp/ip-down
|
|
[ -L /usr/lib/libsmbpw.so ] || /bin/ln -sf /usr/lib/libsmbpw.1.3.so /usr/lib/libsmbpw.so
|
|
|
|
/sbin/lsmod | grep ppp_generic 1>>/dev/null 2>>/dev/null
|
|
if [ $? != 0 ]; then
|
|
/bin/echo "insmod pptp and pppd modules"
|
|
for i in sha1_generic.ko arc4.ko ecb.ko slhc.ko crc-ccitt.ko ppp_generic.ko ppp_async.ko ppp_mppe.ko \
|
|
bsd_comp.ko ppp_deflate.ko
|
|
do
|
|
[ ! -f /lib/modules/others/vpn/$i ] || /sbin/insmod /lib/modules/others/vpn/$i
|
|
done
|
|
fi
|
|
}
|
|
|
|
init_iptable_modules()
|
|
{
|
|
[ -L /usr/lib/libxtables.so.7 ] || /bin/ln -sf /usr/lib/libxtables.so.7.0.0 /usr/lib/libxtables.so.7
|
|
[ -L /usr/lib/libxtables.so ] || /bin/ln -sf /usr/lib/libxtables.so.7.0.0 /usr/lib/libxtables.so
|
|
[ -L /usr/lib/libip4tc.so.0 ] || /bin/ln -sf /usr/lib/libip4tc.so.0.0.0 /usr/lib/libip4tc.so.0
|
|
[ -L /usr/lib/libip4tc.so ] || /bin/ln -sf /usr/lib/libip4tc.so.0.0.0 /usr/lib/libip4tc.so
|
|
[ -L /usr/lib/libip6tc.so.0 ] || /bin/ln -sf /usr/lib/libip6tc.so.0.0.0 /usr/lib/libip6tc.so.0
|
|
[ -L /usr/lib/libip6tc.so ] || /bin/ln -sf /usr/lib/libip6tc.so.0.0.0 /usr/lib/libip6tc.so
|
|
/sbin/lsmod | grep x_tables 1>>/dev/null 2>>/dev/null
|
|
if [ $? != 0 ]; then
|
|
/bin/echo "insmod iptable modules"
|
|
for i in x_tables.ko nf_conntrack.ko xt_tcpudp.ko nf_defrag_ipv4.ko nf_conntrack_ipv4.ko nf_nat.ko \
|
|
ip_tables.ko iptable_nat.ko iptable_filter.ko ipt_MASQUERADE.ko ipt_REDIRECT.ko
|
|
do
|
|
[ ! -f /lib/modules/others/vpn/$i ] || /sbin/insmod /lib/modules/others/vpn/$i
|
|
done
|
|
fi
|
|
}
|
|
|
|
remove_pptp_modules()
|
|
{
|
|
for i in ppp_deflate bsd_comp ppp_mppe ppp_async ppp_generic crc-ccitt slhc
|
|
do
|
|
/sbin/rmmod $i
|
|
done
|
|
}
|
|
|
|
remove_iptable_modules()
|
|
{
|
|
for i in ipt_REDIRECT ipt_MASQUERADE iptable_filter iptable_nat ip_tables nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 \
|
|
xt_tcpudp nf_conntrack x_tables
|
|
do
|
|
/sbin/rmmod $i
|
|
done
|
|
}
|
|
|
|
start()
|
|
{
|
|
if [ ! -f ${PPTPD} ]; then
|
|
/bin/echo "pptpd is not exit."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f /usr/sbin/pppd ]; then
|
|
/bin/echo "pppd is not exit."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -L /etc/rcK.d/K47vpn_pptp ]; then
|
|
/bin/ln -sf ../init.d/vpn_pptp.sh /etc/rcK.d/K47vpn_pptp
|
|
fi
|
|
|
|
if [ -f ${PIDFILE} ]; then
|
|
/bin/echo "pptpd is aleady run."
|
|
exit 1
|
|
fi
|
|
|
|
if [ `/sbin/getcfg "PPTP" "Enable" -u -d "FALSE" -f "${VPN_CONF}"` = "TRUE" ]; then
|
|
/bin/echo "pptpd start."
|
|
init_pptp_modules
|
|
init_iptable_modules
|
|
/sbin/vpn_util init_pptp ${DBG}
|
|
/sbin/daemon_mgr pptpd start "${PPTPD} -c ${PPTPD_CONF} -o ${OPTIONS_PPTPD} -p ${PIDFILE}"
|
|
LOCALIP=`grep "^localip" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
INTERFACE=`grep "^bcrelay" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
/bin/echo "LOCALIP = ${LOCALIP} INTERFACE = ${INTERFACE}"
|
|
/sbin/iptables -t nat -A POSTROUTING -s ${LOCALIP}/24 -o ${INTERFACE} -j MASQUERADE
|
|
else
|
|
/bin/echo "pptpd is disabled."
|
|
fi
|
|
}
|
|
|
|
stop()
|
|
{
|
|
/bin/echo "pptpd stop."
|
|
LOCALIP=`grep "^localip" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
INTERFACE=`grep "^bcrelay" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
/bin/echo "LOCALIP = ${LOCALIP} INTERFACE = ${INTERFACE}"
|
|
/sbin/iptables -t nat -D POSTROUTING -s ${LOCALIP}/24 -o ${INTERFACE} -j MASQUERADE
|
|
|
|
/bin/kill -9 `/bin/pidof pppd` 1>>/dev/null 2>&1
|
|
/bin/kill -9 `/bin/pidof bcrelay` 1>>/dev/null 2>&1
|
|
/sbin/daemon_mgr pptpd stop "${PPTPD} -c ${PPTPD_CONF} -o ${OPTIONS_PPTPD} -p ${PIDFILE}"
|
|
/bin/kill -9 `/bin/cat ${PIDFILE}` 1>>/dev/null 2>&1
|
|
/bin/rm -f ${PIDFILE} 1>>/dev/null 2>&1
|
|
/bin/rm -f /var/log/pptp_online_user 1>>/dev/null 2>&1
|
|
}
|
|
|
|
reload()
|
|
{
|
|
if [ `/sbin/getcfg "PPTP" "Enable" -u -d "FALSE" -f "${VPN_CONF}"` = "FALSE" ]; then
|
|
/bin/echo "pptpd is disabled."
|
|
exit 1;
|
|
fi
|
|
/bin/echo "pptpd stop."
|
|
/bin/kill -9 `/bin/pidof bcrelay` 1>>/dev/null 2>&1
|
|
/sbin/daemon_mgr pptpd stop "${PPTPD} -c ${PPTPD_CONF} -o ${OPTIONS_PPTPD} -p ${PIDFILE}"
|
|
/bin/kill -9 `/bin/cat ${PIDFILE}` 1>>/dev/null 2>&1
|
|
/bin/rm -f ${PIDFILE} 1>>/dev/null 2>&1
|
|
LOCALIP=`grep "^localip" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
INTERFACE=`grep "^bcrelay" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
/bin/echo "LOCALIP = ${LOCALIP} INTERFACE = ${INTERFACE}"
|
|
/sbin/iptables -t nat -D POSTROUTING -s ${LOCALIP}/24 -o ${INTERFACE} -j MASQUERADE
|
|
|
|
/sbin/vpn_util init_pptp ${DBG}
|
|
/sbin/daemon_mgr pptpd start "${PPTPD} -c ${PPTPD_CONF} -o ${OPTIONS_PPTPD} -p ${PIDFILE}"
|
|
LOCALIP=`grep "^localip" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
INTERFACE=`grep "^bcrelay" ${PPTPD_CONF} | cut -d' ' -f 2`
|
|
/bin/echo "LOCALIP = ${LOCALIP} INTERFACE = ${INTERFACE}"
|
|
/sbin/iptables -t nat -A POSTROUTING -s ${LOCALIP}/24 -o ${INTERFACE} -j MASQUERADE
|
|
}
|
|
|
|
restart()
|
|
{
|
|
stop
|
|
sleep 1
|
|
start
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
remove_pptp_modules
|
|
;;
|
|
restart)
|
|
restart
|
|
;;
|
|
init)
|
|
/bin/echo "pptpd init."
|
|
init_pptp_modules
|
|
init_iptable_modules
|
|
/sbin/vpn_util init_pptp
|
|
;;
|
|
reload)
|
|
reload
|
|
;;
|
|
*)
|
|
echo "Usage: /etc/init.d/$0 {start|stop|restart|reload}"
|
|
exit 1
|
|
esac
|
|
|
|
exit 0
|