ocserv.d 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. # Autorun whit crontab by MoeClub
  3. MyARG=`echo "$1" |sed 's/^\s$//' |sed 's/[a-z]/\u&/g'`
  4. EthName=`cat /proc/net/dev |grep ':' |cut -d':' -f1 |sed 's/\s//g' |grep -iv '^lo\|^sit\|^stf\|^gif\|^dummy\|^vmnet\|^vir\|^gre\|^ipip\|^ppp\|^bond\|^tun\|^tap\|^ip6gre\|^ip6tnl\|^teql\|^ocserv\|^vpn' |sed -n '1p'`
  5. [ -n "$EthName" ] || exit 1
  6. MyPath="$(dirname `readlink -f "$0"`)"
  7. MyConfig="${MyPath}/ocserv.conf"
  8. [ -f "${MyConfig}" ] || exit 1
  9. MyPort=`cat "${MyConfig}" |grep '#\?tcp-port' |cut -d"=" -f2 |sed 's/\s//g' |grep -o '[0-9]*'`
  10. MyUDP=`cat "${MyConfig}" |grep '#\?udp-port' |cut -d"=" -f2 |sed 's/\s//g' |grep -o '[0-9]*'`
  11. MyPublicIP=`wget --no-check-certificate --timeout=3 --no-cache -4 -qO- "http://checkip.amazonaws.com" |grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
  12. IPTABLES(){
  13. RULE_RAW=`echo "$1" |sed 's/^\s*//' |sed 's/\s*$//'`
  14. echo "$RULE_RAW" |grep -q "^iptables"
  15. [ $? -eq 0 ] || return 1
  16. RULE_CHECK=`echo "$RULE_RAW" |sed 's/-I\|-A/-C/'`
  17. ${RULE_CHECK} >>/dev/null 2>&1
  18. [ $? -eq 1 ] && ${RULE_RAW}
  19. return 0
  20. }
  21. INIT(){
  22. MyCMD=`echo "$1" |sed 's/^\s$//'`
  23. [ -n "${MyCMD}" ] || MyCMD=`readlink -f "$0"`
  24. [ -n "${MyCMD}" ] && MyDEL=$(echo "${MyCMD}" |tr '/' '\\\\' |sed 's/\\/\\\//g')
  25. [ -n "${MyDEL}" ] || return
  26. if [ -f /etc/crontab ]; then
  27. sed -i "/${MyDEL}/d" /etc/crontab
  28. while [ -z "$(sed -n '$p' /etc/crontab |sed 's/^\s$//')" ]; do sed -i '$d' /etc/crontab; done
  29. sed -i "\$a\\@reboot root ${MyCMD} >>/dev/null 2>&1 &" /etc/crontab
  30. sed -i '$a\\n\n\n' /etc/crontab
  31. fi
  32. }
  33. STOP(){
  34. DEAMONS=("ocserv" "ocserv-main")
  35. for deamon in "${DEAMONS[@]}"; do [ -n "$deamon" ] && kill -9 `ps -C "$deamon" -o pid=` >>/dev/null 2>&1; done
  36. }
  37. START(){
  38. STOP;
  39. IPTABLES "iptables -t nat -A POSTROUTING -o ${EthName} -j MASQUERADE"
  40. IPTABLES "iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu"
  41. [ -n "$MyPort" ] && IPTABLES "iptables -I INPUT -p tcp --dport ${MyPort} -j ACCEPT"
  42. [ -n "$MyUDP" ] && IPTABLES "iptables -I INPUT -p udp --dport ${MyUDP} -j ACCEPT"
  43. [ -n "$MyPublicIP" ] && [ -f "${MyPath}/group/NoRoute" ] && sed -i "s/^no-route\s*=\s*.*\/255.255.255.255/no-route = ${MyPublicIP}\/255.255.255.255/" /etc/ocserv/group/NoRoute
  44. ocserv --config "${MyConfig}" >>/dev/null 2>&1;
  45. }
  46. PORT(){
  47. nc -w 1 -vz 0.0.0.0 "${MyPort}" >>/dev/null 2>&1;
  48. [ "$?" == "0" ] && echo "0" || echo "1";
  49. }
  50. SCAN(){
  51. if [[ "$(PORT)" == "0" ]]; then
  52. sleep 300;
  53. else
  54. START;
  55. sleep 10;
  56. fi
  57. }
  58. if [ "$MyARG" == "INIT" ]; then
  59. INIT;
  60. exit 0;
  61. elif [ "$MyARG" == "START" ]; then
  62. START;
  63. exit 0;
  64. elif [ "$MyARG" == "RESTART" ]; then
  65. START;
  66. exit 0;
  67. elif [ "$MyARG" == "STOP" ]; then
  68. STOP;
  69. exit 0;
  70. fi
  71. command -v nc >>/dev/null 2>&1
  72. if [ $? -ne 0 ]; then
  73. START;
  74. exit 0;
  75. fi
  76. while true; do SCAN; done