#!/bin/sh /etc/rc.common # Copyright (C) 2018-2020 Lienol 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 & kill -q -9 `pidof pppoe-server | sed "s/$$//g"` }