Advertisement
Guest User

Untitled

a guest
Feb 26th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 KB | None | 0 0
  1. #!/bin/sh
  2. filedir=/etc/openvpn/dns
  3. filebase=$(echo $filedir/$dev | sed 's/\(tun\|tap\)1/client/;s/\(tun\|tap\)2/server/')
  4. conffile=$filebase\.conf
  5. resolvfile=$filebase\.resolv
  6. dnsscript=$(echo /etc/openvpn/fw/$(echo $dev)-dns\.sh | sed 's/\(tun\|tap\)1/client/;s/\(tun\|tap\)2/server/')
  7. fileexists=
  8. instance=$(echo $dev | sed "s/tun1//;s/tun2*/0/")
  9.  
  10. for argument in "$@"
  11. do
  12. logger -t "openvpn-updown-codyqx4-main" "Argument Passed: $argument"
  13. done
  14.  
  15. logger -t "openvpn-updown-codyqx4-main" "FileDir: $filedir"
  16. logger -t "openvpn-updown-codyqx4-main" "FileBase: $filebase"
  17. logger -t "openvpn-updown-codyqx4-main" "ConfFile: $conffile"
  18. logger -t "openvpn-updown-codyqx4-main" "ResolvFile: $resolvfile"
  19. logger -t "openvpn-updown-codyqx4-main" "DNSScript: $dnsscript"
  20. logger -t "openvpn-updown-codyqx4-main" "Instance: $instance"
  21.  
  22.  
  23. create_client_list(){
  24. server=$1
  25. VPN_IP_LIST=$(nvram get vpn_client$(echo $instance)_clientlist)
  26.  
  27. logger -t "openvpn-updown-codyqx4-create_client_list" "VPN IP List: $VPN_IP_LIST"
  28.  
  29. IFS="<"
  30.  
  31. for ENTRY in $VPN_IP_LIST
  32. do
  33. logger -t "openvpn-updown-codyqx4-create_client_list" "Entry: $ENTRY"
  34. if [ "$ENTRY" = "" ]
  35. then
  36. continue
  37. fi
  38. TARGET_ROUTE=$(echo $ENTRY | cut -d ">" -f 4)
  39. logger -t "openvpn-updown-codyqx4-create_client_list" "Target Route: $TARGET_ROUTE"
  40. if [ "$TARGET_ROUTE" = "VPN" ]
  41. then
  42. VPN_IP=$(echo $ENTRY | cut -d ">" -f 2)
  43. logger -t "openvpn-updown-codyqx4-create_client_list" "VPN IP: $VPN_IP"
  44. if [ "$VPN_IP" != "0.0.0.0" ]
  45. then
  46. logger -t "openvpn-updown-codyqx4-create_client_list" "Doing IP Tables Echo: Instance=$instance, VPN IP=$VPN_IP, Server=$server, DNSScript=$dnsscript"
  47. echo iptables -t nat -A DNSVPN$instance -s $VPN_IP -j DNAT --to-destination $server >> $dnsscript
  48. fi
  49. logger -t "openvpn-updown" "Forcing $VPN_IP to use DNS server $server"
  50. fi
  51. done
  52. IFS=$OLDIFS
  53. }
  54.  
  55.  
  56. if [ ! -d $filedir ]; then mkdir $filedir; fi
  57. if [ -f $conffile ]; then rm $conffile; fileexists=1; fi
  58. if [ -f $resolvfile ]; then rm $resolvfile; fileexists=1; fi
  59.  
  60. if [ $script_type == 'up' ]
  61. then
  62. logger -t "openvpn-updown-codyqx4-main" "Up Script"
  63. logger -t "openvpn-updown-codyqx4-main" "Doing IP Tables Echo: Instance=$instance, DNSScript=$dnsscript"
  64. echo iptables -t nat -N DNSVPN$instance > $dnsscript
  65.  
  66. if [ $instance != 0 -a $(nvram get vpn_client$(echo $instance)_rgw) == 2 -a $(nvram get vpn_client$(echo $instance)_adns) == 3 ]
  67. then
  68. logger -t "openvpn-updown-codyqx4-main" "Set DNS: 0"
  69. setdns=0
  70. else
  71. logger -t "openvpn-updown-codyqx4-main" "Set DNS: 1"
  72. setdns=-1
  73. fi
  74.  
  75. for optionname in $(set | grep "^foreign_option_" | sed "s/^\(.*\)=.*$/\1/g")
  76. do
  77. option=$(eval "echo \\$$optionname")
  78. logger -t "openvpn-updown-codyqx4-main" "Option $optionname: $option"
  79. if echo $option | grep "dhcp-option WINS "; then echo $option | sed "s/ WINS /=44,/" >> $conffile; fi
  80. if echo $option | grep "dhcp-option DNS"
  81. then
  82. logger -t "openvpn-updown-codyqx4-main" "Echoing Option $option to $resolvfile"
  83. echo $option | sed "s/dhcp-option DNS/nameserver/" >> $resolvfile
  84. if [ $setdns == 0 ]
  85. then
  86. logger -t "openvpn-updown-codyqx4-main" "Preparing to Call Create Client DNS and Flip SetDNS"
  87. create_client_list $(echo $option | sed "s/dhcp-option DNS//")
  88. setdns=1
  89. fi
  90. fi
  91. if echo $option | grep "dhcp-option DOMAIN"; then echo $option | sed "s/dhcp-option DOMAIN/search/" >> $resolvfile; fi
  92. done
  93.  
  94. if [ $setdns == 1 ]
  95. then
  96. logger -t "openvpn-updown-codyqx4-main" "Doing IP Table Echo: DNS Instance=$instance, DNSScript=$dnsscript"
  97. echo iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNSVPN$instance >> $dnsscript
  98. echo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 53 -j DNSVPN$instance >> $dnsscript
  99. fi
  100. fi
  101.  
  102.  
  103. if [ $script_type == 'down' -a $instance != 0 ]
  104. then
  105. logger -t "openvpn-updown-codyqx4-main" "Down Script With Valid Instance: $instance"
  106. /usr/sbin/iptables -t nat -D PREROUTING -p udp -m udp --dport 53 -j DNSVPN$instance
  107. /usr/sbin/iptables -t nat -D PREROUTING -p tcp -m tcp --dport 53 -j DNSVPN$instance
  108. /usr/sbin/iptables -t nat -F DNSVPN$instance
  109. /usr/sbin/iptables -t nat -X DNSVPN$instance
  110. fi
  111.  
  112. if [ -f $conffile -o -f $resolvfile -o -n "$fileexists" ]
  113. then
  114. logger -t "openvpn-updown-codyqx4-main" "Conf+Resolve Files Exist Check Passed"
  115. if [ $script_type == 'up' ] ; then
  116. logger -t "openvpn-updown-codyqx4-main" "Up Script"
  117. if [ -f $dnsscript ]
  118. then
  119. logger -t "openvpn-updown-codyqx4-main" "Up Script: Running DNS Script: $dnsscript"
  120. sh $dnsscript
  121. fi
  122. service updateresolv
  123. elif [ $script_type == 'down' ]; then
  124. logger -t "openvpn-updown-codyqx4-main" "Down Script: Deleting DNS Script: $dnsscript"
  125. rm $dnsscript
  126. logger -t "openvpn-updown-codyqx4-main" "Down Script: Update Resolv"
  127. service updateresolv
  128. logger -t "openvpn-updown-codyqx4-main" "Down Script: Restarting DNSMasq"
  129. service restart_dnsmasq
  130. fi
  131. fi
  132.  
  133. rmdir $filedir
  134. rmdir /etc/openvpn
  135.  
  136. if [ -f /jffs/scripts/openvpn-event ]
  137. then
  138. logger -t "custom script" "Running /jffs/scripts/openvpn-event (args: $*)"
  139. sh /jffs/scripts/openvpn-event $*
  140. fi
  141.  
  142. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement