102 lines
2.9 KiB
Bash
Executable File
102 lines
2.9 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2018-2020 Lienol <lawlienol@gmail.com>
|
|
|
|
START=99
|
|
|
|
CONFIG="pppoe-server"
|
|
CONFIG_FILE=/etc/ppp/$CONFIG-options
|
|
CHAP_SECRETS=/var/etc/chap-secrets
|
|
TEMP=/tmp/$CONFIG.tmp
|
|
|
|
config_t_get() {
|
|
local index=0
|
|
[ -n "$4" ] && index=$4
|
|
local ret=$(uci -q get $CONFIG.@$1[$index].$2 2>/dev/null)
|
|
echo ${ret:=$3}
|
|
}
|
|
|
|
setup_users() {
|
|
config_get enabled $1 enabled
|
|
[ "$enabled" -eq 0 ] && return 0
|
|
config_get username $1 username
|
|
config_get password $1 password
|
|
config_get ipaddress $1 ipaddress
|
|
[ -n "$username" -a -n "$password" ] && echo "$username $CONFIG $password $ipaddress" >> $CHAP_SECRETS
|
|
}
|
|
|
|
del_user()
|
|
{
|
|
cat $CHAP_SECRETS | grep -v $CONFIG > $TEMP
|
|
cat $TEMP > $CHAP_SECRETS
|
|
rm $TEMP
|
|
}
|
|
|
|
start() {
|
|
config_load pppoe-server
|
|
enabled=$(config_t_get service enabled)
|
|
[ "$enabled" -eq 0 ] && exit 0
|
|
cat <<-EOF >$CONFIG_FILE
|
|
# PPP options for the PPPoE server
|
|
# LIC: GPL
|
|
name $CONFIG
|
|
login
|
|
require-mschap-v2
|
|
refuse-chap
|
|
require-pap
|
|
lcp-echo-interval 10
|
|
lcp-echo-failure 2
|
|
mru $(config_t_get service mru 1492)
|
|
mtu $(config_t_get service mtu 1492)
|
|
ms-dns $(config_t_get service dns1 223.5.5.5)
|
|
ms-dns $(config_t_get service dns2 119.29.29.29)
|
|
logfile $(config_t_get service log /var/log/pppoe-server.log)
|
|
EOF
|
|
del_user
|
|
config_foreach setup_users user
|
|
ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets
|
|
local is_nat=$(config_t_get service is_nat)
|
|
local localip=$(config_t_get service localip)
|
|
if [ "$is_nat" -eq 1 ];then
|
|
local export_interface=$(config_t_get service export_interface)
|
|
if [ "$export_interface" != "default" ];then
|
|
iptables -t nat -A POSTROUTING -s ${localip%.*}.0/24 -o ${export_interface} -m comment --comment "PPPoE Server" -j MASQUERADE
|
|
else
|
|
iptables -t nat -A POSTROUTING -s ${localip%.*}.0/24 -m comment --comment "PPPoE Server" -j MASQUERADE
|
|
fi
|
|
iptables -A forwarding_rule -s ${localip%.*}.0/24 -m comment --comment "PPPoE Server" -j ACCEPT
|
|
fi
|
|
/usr/sbin/pppoe-server -k -I $(config_t_get service client_interface) -L $(config_t_get service localip) -R $(config_t_get service remoteip) -N $(config_t_get service count)
|
|
}
|
|
|
|
stop() {
|
|
del_user
|
|
nums=$(iptables -t nat -n -L POSTROUTING 2>/dev/null | grep -c "PPPoE Server")
|
|
if [ -n "$nums" ]; then
|
|
until [ "$nums" = 0 ]
|
|
do
|
|
rules=$(iptables -t nat -n -L POSTROUTING --line-num 2>/dev/null | grep "PPPoE Server" | awk '{print $1}')
|
|
for rule in $rules
|
|
do
|
|
iptables -t nat -D POSTROUTING $rule 2> /dev/null
|
|
break
|
|
done
|
|
nums=$(expr $nums - 1)
|
|
done
|
|
fi
|
|
nums2=$(iptables -L forwarding_rule 2>/dev/null | grep -c "PPPoE Server")
|
|
if [ -n "$nums2" ]; then
|
|
until [ "$nums2" = 0 ]
|
|
do
|
|
rules=$(iptables -L forwarding_rule --line-num 2>/dev/null | grep "PPPoE Server" | awk '{print $1}')
|
|
for rule in $rules
|
|
do
|
|
iptables -D forwarding_rule $rule 2> /dev/null
|
|
break
|
|
done
|
|
nums2=$(expr $nums2 - 1)
|
|
done
|
|
fi
|
|
ps | grep "pppd plugin rp-pppoe.so" | grep -v "grep" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
|
|
killall -q -9 pppoe-server
|
|
}
|