... {code} #!/bin/bash TMPDIR=/tmp/${0##*/} mkdir -p $TMPDIR trap __exit EXIT __exit() { local ret=$? rm -f $TMPDIR/*.$$ return $ret } function __radclient() { res=$(radclient -c 1 -r 2 -t 1 -x $nas_ip:$coa_port $1 $coa_psw) ret=$? set +x echo "$res" | grep -q "Error-Cause = 0\|Error-Cause = 200" && ret=0 echo "$res" | grep -q "Error-Cause = Resources Unavailable" && ret=254 echo "$res" | grep -q "no response from server" && ret=254 if echo "$res" | grep -q "Error-Cause = Session-Context-Not-Found\|Missing-Attribute"; then echo -e "clear subscriber session username $login\nclear subscriber session username $ip"\ | ssh_send -q -e "$telnet_enpassword" -t "$telnet_type" -u "$telnet_login" -p "$telnet_password" "$telnet_ip" --port "${telnet_port:-22}" fi echo $res set -x return $ret } # Приходит при создании пользователя в биллинге # И при смене критичных параметров(ip, vlan, port etc.)(с новыми значениями) # Обычно/ используется для ip авторизации user_add() { : } # Приходит при удалении пользователя из биллинга # И при смене критичных параметров(ip, vlan, port etc.)(со старыми значениями) # Обычно используется для ВСЕХ видов авторизации user_del() { user_disconnect } # Приходит после авторизации пользователя # Рекомендуется политику пользователя передавать в радиус replay параметрах, А НЕ В ЭТОМ СОБЫТИИ, # т.к. у любого оборудования есть ограничения на колличество отправляемых команд в секунду user_accept() { echo "Acct-Session-Id=${acct_session_id},Cisco-avpair+='subscriber:sd=FWPOL_BLOCKED_REDIRECT'" | radclient -x $nas_ip:$coa_port coa $coa_psw -r 1 } # Приходит при отключении пользователя # Рекомендуется избегать удаления пользователя из списков, для экономии очереди команд на оборудовании user_drop() { echo "Acct-Session-Id=${acct_session_id},Cisco-avpair+='subscriber:sa=FWPOL_BLOCKED_REDIRECT'" | radclient -x $nas_ip:$coa_port coa $coa_psw -r 1 } # Приходит при превышении лимита, либо при отключении услуги user_redirect() { echo "Acct-Session-Id=${acct_session_id},Cisco-avpair+='subscriber:sa=FWPOL_NEGBAL_REDIRECT'" | radclient -x $nas_ip:$coa_port coa $coa_psw -r 1 } # Приходит после оплаты, если хватило денег на включение услуги user_redirect_cancel() { echo "Acct-Session-Id=${acct_session_id},Cisco-avpair+='subscriber:sd=FWPOL_NEGBAL_REDIRECT'" | radclient -x $nas_ip:$coa_port coa $coa_psw -r 1 } # Приходит при изменении скорости подключения # Или включения\выключении услуги(турбокнопка, ночной форсаж и т.д.) user_rate_set() { echo "Acct-Session-Id=${acct_session_id}, \ Cisco-avpair+='ip:qos-policy-in=add-class(sub,(class-default),police(${ceil_in}))', \ Cisco-avpair+='ip:qos-policy-out=add-class(sub,(class-default),shape(${ceil_out}))', \ Cisco- AVPair+='Method-List=default'" \ | radclient -x $nas_ip:$coa_port coa $coa_psw -r 1 }
|
# на самом деле User-Name cisco игнорирует, но он должен быть и быть не пустым иначе ошибка echo "User-Name=\"$login\",Cisco-Account-Info=\"S${ip}:vrf-id=${vrf}\",\ cisco-avpair+=\"subscriber:command=account-logoff\"" | __radclient coa #TODO_OSV echo "User-name=\"1\",Cisco-Account-Info=\"S10.255.0.2\",cisco-avpair+=\"subscriber:command=account-logoff\"" | radclient 185.8.158.73:3799 coa servicemode
|