Guest User

Untitled

a guest
May 26th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.24 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3.  
  4. usage()
  5. {
  6.     cat << EOF
  7. Usage: $0 [ <ip> ] [ <nextmark> ] [ <switch_addr> ] [ <switch_port> ] [ <id_tariff> ]
  8.  
  9.   <ip>          - 192.168.x.x
  10.   <nextmark>    - iptables MARK
  11.   <switch_addr>  - switch address
  12.   <switch_port> - switch port
  13.   <tariff_id>   - 1-100
  14.  
  15. EOF
  16. }
  17.  
  18.  
  19. function valid_ip()
  20. {
  21.     local  ip=$1
  22.     local  stat=1
  23.  
  24.     if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
  25.         OIFS=$IFS
  26.         IFS='.'
  27.         ip=($ip)
  28.         IFS=$OIFS
  29.         [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
  30.             && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
  31.         stat=$?
  32.     fi
  33.     return $stat
  34. }
  35.  
  36.  
  37. if [ $# -ne 5 ]; then
  38.  
  39.     usage
  40.     exit 1
  41.  
  42. else
  43.     # Правила для маркировки адреса
  44.     iptables -t mangle -A PREROUTING -s $ip -j MARK --set-mark $nextmark
  45.     iptables -t mangle -A PREROUTING -s $ip -j RETURN
  46.  
  47.     # В данную переменную мы пишем строку конфига DHCP с учетом адреса юзера ($ip), адреса агента ($switch_addr) и порта агента ($switch_port)
  48.     dhcp='class "'$switch_addr'_'$switch_port'{ match if (binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)) ="'$switch_port'") and binary-to-ascii(10,8,".",packet(24,4))="'$switch_addr'";} pool { range '$ip'; allow members of"'$switch_addr'_'$switch_port'";}'
  49.     # Пишем конфиг ДХЦП в соответствующий файл
  50.     echo $dhcp >/etc/dhcp/$switch_addr'_'$switch_port'.cfg'
  51.     # Рестартим ДХЦП
  52.     /etc/init.d/isc-dhcp-server restart
  53.     # Включаем интернет пользователю
  54.     iptables -t nat -A POSTROUTING -s $ip -o eth0 -j MASQUERADE
  55. fi
  56. exit 1
  57. fi
  58.  
  59.  
  60. # TODO:
  61. # Добавление юзера на порт
  62. # Конфиги свичей не правятся,изменения вносятся по telnet, и сразу конфиг выгружается по tftp
  63. # Напомню админу, что access_profile profile_id 2 access_id всегда равен номеру порта свича
  64. # соответственно и profile_id 3 аналогично. НЕ ВНОСИТЬ ИЗМЕНЕНИЙ В profile_id 1 блять!!!
  65. # Создаем telnet-сессию со свичом
Add Comment
Please, Sign In to add comment