assign-ip-ssid 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/bin/sh
  2. CONFIG=1
  3. source /usr/sbin/helper.sh
  4. OPENVPN_CONF=/tmp/etc/openvpn
  5. DNSMASQ_CONF=/tmp/etc/dnsmasq.conf
  6. cmd_log () {
  7. if [ ${1} -ne 0 ]; then
  8. logger "${2}[${1}] - ${3}"
  9. fi
  10. }
  11. cmd_run () {
  12. CMD=`${2}`
  13. ERRCODE=$?
  14. cmd_log ${ERRCODE} "${1}" "${ERR}: ${2}, ${CMD}"
  15. return ${ERRCODE}
  16. }
  17. iptable () {
  18. IFACE=`echo "${1}"`
  19. local OPT=`echo "${2}"`
  20. shift 2
  21. if [ "${OPT}" = "I" ]; then
  22. iptable "${IFACE}" "D" ${@}
  23. fi
  24. if [ $# -eq 1 ]; then
  25. cmd_run "iptable" "iptables -t nat -${OPT} POSTROUTING -s ${1} -o ${IFACE} -j MASQUERADE"
  26. elif [ $# -eq 2 ]; then
  27. cmd_run "iptable" "iptables -${OPT} ${1} -i ${IFACE} -m state --state NEW -j ${2}"
  28. elif [ $# -eq 3 ]; then
  29. cmd_run "iptable" "iptables -${OPT} ${1} -i ${IFACE} -o ${3} -j ${2}"
  30. else
  31. cmd_log 0 "iptable" "Unknown argument length ${#} (${@})."
  32. fi
  33. }
  34. ebtable () {
  35. if [ "${2}" = "I" ]; then
  36. ebtable "${1}" "D" "${3}"
  37. fi
  38. cmd_run "ebtable" "ebtables -t broute -${2} BROUTING -p ${3} -i ${1} -j DROP"
  39. }
  40. assign_ip () {
  41. if [ ! -d "${OPENVPN_CONF}/client${1}/" ]; then
  42. logger "Missing client${1} in ${OPENVPN_CONF}"
  43. return 1
  44. fi
  45. ifconfig "${IFACE}" > /dev/null 2>&1 || continue
  46. IFACE_TUN=`cat "${OPENVPN_CONF}/client${1}/config.ovpn" | awk '/dev/ {print $2}'`
  47. IFACE="${2}"
  48. IFACE_INET_ADDR="${3}"
  49. IFACE_NWRK_ADDR="${IFACE_INET_ADDR%.*}.0"
  50. IFACE_MASK_ADDR="255.255.255.0"
  51. DHCP_START="${IFACE_INET_ADDR%.*}.${4}"
  52. DHCP_END="${IFACE_INET_ADDR%.*}.${5}"
  53. RTABLE=$((${1} + 10))
  54. CIDR=24
  55. if [ $# -gt 5 ]; then
  56. CIDR="${5}"
  57. fi
  58. LAN=$(ifconfig "br0" | sed -ne's/.*inet addr:\([^ ]*\).*$/\1/p')
  59. if [ `cat ${DNSMASQ_CONF} | grep -c ${IFACE}` -eq 0 ]; then
  60. killall dnsmasq
  61. if [ `cat ${DNSMASQ_CONF} | grep -c "log-dhcp"` -eq 0 ]; then
  62. pc_append "log-dhcp" ${DNSMASQ_CONF}
  63. fi
  64. logger "dnsmasq-dhcp: Configure ${IFACE} to have special DHCP on ${IFACE_INET_ADDR}"
  65. cmd_run "pc_append" "pc_append interface=${IFACE} ${DNSMASQ_CONF}"
  66. cmd_run "pc_append" "pc_append dhcp-range=${IFACE},${DHCP_START},${DHCP_END},${IFACE_MASK_ADDR},24h ${DNSMASQ_CONF}"
  67. cmd_run "pc_append" "pc_append dhcp-option=${IFACE},3,${IFACE_INET_ADDR} ${DNSMASQ_CONF}"
  68. dnsmasq --log-async
  69. fi
  70. while [ ! -n "`ifconfig | grep ${IFACE_TUN}`" ]; do
  71. sleep 1
  72. done
  73. ip route show table main | grep -Ev ^default | while read ROUTE; do
  74. if [ `ip route show table "${RTABLE}" | grep -ice "${ROUTE}"` -eq 0 ]; then
  75. cmd_run "ip-route" "ip route add table ${RTABLE} ${ROUTE}"
  76. fi
  77. done
  78. cmd_run "ip-route" "ip route add default dev ${IFACE_TUN} table ${RTABLE}"
  79. cmd_run "ip-rule" "ip rule add dev ${IFACE} table ${RTABLE}"
  80. cmd_run "ip-route" "ip route flush cache"
  81. ebtable "${IFACE}" "I" "ipv4"
  82. ebtable "${IFACE}" "I" "ipv6"
  83. ebtable "${IFACE}" "I" "arp"
  84. iptable "${IFACE}" "I" "INPUT" "ACCEPT"
  85. iptable "${IFACE}" "I" "FORWARD" "ACCEPT" "${IFACE_TUN}"
  86. iptable "${IFACE_TUN}" "I" "${IFACE_NWRK_ADDR}/${CIDR}"
  87. }
  88. # assign_ip <client #no> <iface> <iface inet> <range start> <range end> [<cidr>]
  89. assign_ip 1 "wl0.1" "192.168.2.1" "2" "254" #24
  90. assign_ip 2 "wl0.2" "192.168.3.1" "2" "254" #24
  91. assign_ip 1 "wl0.3" "192.168.4.1" "2" "254" #24
  92. assign_ip 3 "wl1.1" "192.168.5.1" "2" "254"
  93. assign_ip 4 "wl1.2" "192.168.6.1" "2" "254" #24
  94. assign_ip 5 "wl1.3" "192.168.7.1" "2" "254" #24