diff --git a/README.md b/README.md index 2bce6e4..3e9b67a 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ Command Line Scripts for ZJU (VPN / WLAN / DNS) ### Debian / Ubuntu -https://github.com/QSCTech/zjunet/releases +https://github.com/QSCTech/zjunet/releases 下载 deb,双击安装就是。 ### Openwrt -https://github.com/QSCTech/zjunet/releases +https://github.com/QSCTech/zjunet/releases 下载 opk,然后 `opkg install` 就是。 ### From source diff --git a/lib/user.sh b/lib/user.sh index 48e44c3..84f750b 100755 --- a/lib/user.sh +++ b/lib/user.sh @@ -19,21 +19,18 @@ # . # init -users_enabled="$HOME/.zjunet/users-enabled" -users_disabled="$HOME/.zjunet/users-disabled" -mkdir -p $users_enabled -mkdir -p $users_disabled + +L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf BASEDIR=$(dirname $0) getall() { - ls -1A $users_enabled | xargs | tr "\n" " " + cat $L2TPD_CFG_FILE | grep lac | sed 's/\[lac zju-l2tp-//' | sed 's/\]//' } edituser() { username=$1 password=$2 - echo $password > "$users_enabled/${username}" echo "[INFO] Disconnect VPN" "${BASEDIR}/vpn.sh" disconnect echo "[INFO] Write to xl2tpd.conf" @@ -45,18 +42,6 @@ edituser() { # dispatch case "$1" in - enable) - users=$(ls -1A $users_disabled | xargs | tr "\n" " ") - read -p "Enable User [ ${users}]: " username - mv "${users_disabled}/${username}" "${users_enabled}/${username}" - ;; - - disable) - users=$(getall) - read -p "Disable User [ ${users}]: " username - mv "${users_enabled}/${username}" "${users_disabled}/${username}" - ;; - add) read -p "username: " username read -p "password: " password @@ -70,14 +55,8 @@ case "$1" in edituser $username $password ;; - delete) - users=$(getall) - read -p "Delete User [ ${users}]: " username - rm -i "$users_enabled/${username}" - ;; - list) - ls -1A $users_enabled + getall ;; # Get a user @@ -107,8 +86,9 @@ case "$1" in # @private getpwd) username=$2 - cat "${users_enabled}/${username}" + "${BASEDIR}/sudo.sh" cat /etc/ppp/peers/zju-l2tp-${username} | grep password | sed 's/password //' ;; + *) ${BASEDIR}/zjunet.sh usage ;; diff --git a/lib/vpn.sh b/lib/vpn.sh index c39efa9..593ed41 100755 --- a/lib/vpn.sh +++ b/lib/vpn.sh @@ -42,12 +42,16 @@ disconnect() { connect() { disconnect + sleep 3 + users=$("${BASEDIR}/user.sh" getall) + "${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" restart + for username in $users; do password=$("${BASEDIR}/user.sh" getpwd $username) echo "[INFO] Login using ${username}" - "${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" connect $username $password + "${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" waituser $username flush done diff --git a/lib/xl2tpd.sh b/lib/xl2tpd.sh index 2c022e4..c3410a4 100755 --- a/lib/xl2tpd.sh +++ b/lib/xl2tpd.sh @@ -27,7 +27,7 @@ L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf USERNAME=$2 PASSWORD=$3 LAC_NAME=zju-l2tp-${USERNAME} -PPP_LOG_FILE=/tmp/zju-l2tp-log +PPP_LOG_FILE=/tmp/zju-l2tp-log-${USERNAME} PPP_OPT_FILE=/etc/ppp/peers/${LAC_NAME} mkdir -p /var/log/zjunet/ @@ -86,7 +86,6 @@ xl2tpd_restart() { } xl2tpd_create_lac() { - #touch $PPP_LOG_FILE cat > $PPP_OPT_FILE < $PPP_LOG_FILE - - prev_count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | wc -l) - +xl2tpd_waituser() { for i in $(seq 0 10000); do tail $PPP_LOG_FILE >> $LOG_FILE @@ -146,10 +138,13 @@ connect() { fi echo -n > $PPP_LOG_FILE - count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | wc -l) - if [ ${count} -gt ${prev_count} ]; then - echo "Bring up ppp, done." - return + pid="/var/run/ppp-${LAC_NAME}.pid" + if [ -e $pid ]; then + ppp=$(cat $pid | grep ppp) + if ip addr show | grep "inet.*${ppp}" > /dev/null; then + ip addr show | grep "inet.*${ppp}" | sed 's/^ */[VPN] /' + return + fi fi done @@ -180,8 +175,8 @@ case $1 in xl2tpd_create_lac ;; - connect) - connect + waituser) + xl2tpd_waituser ;; disconnect) diff --git a/lib/zjunet.sh b/lib/zjunet.sh index 930a3d0..22a64dd 100755 --- a/lib/zjunet.sh +++ b/lib/zjunet.sh @@ -52,11 +52,9 @@ Usage: zjunet [ACTION] Actions: user add Add a user - edit Edit a (enabled) user - delete Delete a (enabled) user list List all enabled users - enable Enable a user - disable Disable a user + edit Edit a (enabled) user + Note: to delete/disable a user, edit /etc/xl2tpd/xl2tpd.conf yourself all connect(-c) Connect VPN & ZJUWLAN, and combine them using nexthop disconnect(-d) Disconnect VPN & ZJUWLAN