скрипт написан "на коленке", что б не писать руками длинный конфиг
проверено на 9 свичах - все 9 заработали без проблем, сразу
первый шаг - инициализация массива с маками, вместо звездочек впишите свойи маки свичей (в нижнем регистре!)
Циклы у меня везде от 1 до 24 порта, от 1 до 9 свича, править соответсвенно, до нужного вас кол-ва портов и свичей.
Знаю сам что скрипт "не красивый", но зато простой )
схема
Код:
(клиенты)=Vlan 2[свич 1]==Vlan1,2==[dhcpd]
Свич управляется из Vlan1, сеть 172.16.0.0/24
Клиентам даются адреса 192.168.1.0/24
подробнее - тут
http://www.freebsd.org/cgi/man.cgi?quer ... +and+Ports[/code]
Код:
#!/bin/bash
SW_MAC[1]="0:15:e9:**:**:**"
SW_MAC[2]="0:15:e9:**:**:**"
SW_MAC[3]="0:15:e9:**:**:**"
SW_MAC[4]="0:15:e9:**:**:**"
SW_MAC[5]="0:15:e9:**:**:**"
SW_MAC[6]="0:15:e9:**:**:**"
SW_MAC[7]="0:15:e9:**:**:**"
SW_MAC[8]="0:15:e9:**:**:**"
SW_MAC[9]="0:15:e9:**:**:**"
SW_ID=1
PORT=0
IP=1
echo "lease-file-name \"/var/lib/dhcp/dhcpd.leases\";"
echo "ddns-update-style none;"
echo "option domain-name-servers 172.16.0.1;"
echo "option domain-name-servers 172.16.0.2;"
echo "server-identifier 172.16.0.3;"
echo "local-address 172.16.0.3;"
echo "default-lease-time 3100; # 51 minutes."
echo "max-lease-time 604800; # 1 week"
echo "authoritative;"
echo "log-facility local1;"
echo ""
echo "ignore client-updates;"
echo "#if exists agent.circuit-id {"
echo " log ( info, concat( \"Lease for \", binary-to-ascii (10, 8, \".\", leased-address), \" is connected to interface \","
echo " binary-to-ascii (10, 8, \"/\", suffix ( option agent.circuit-id, 2)), \" , VLAN \","
echo " binary-to-ascii (10, 16, \"\", substring( option agent.circuit-id, 2, 2)), \" on switch \","
echo " binary-to-ascii(16, 8, \":\", substring( option agent.remote-id, 2, 6))));"
echo ""
echo " log ( info, concat( \"Lease for \", binary-to-ascii (10, 8, \".\", leased-address),"
echo " \" raw option-82 info is CID: \", binary-to-ascii (10, 8, \".\", option agent.circuit-id), \" AID: \","
echo " binary-to-ascii(16, 8, \".\", option agent.remote-id)));"
echo ""
echo ""
echo ""
for SW in `seq 1 9`
do
for PORT in `seq 1 24`
do
echo "class \"dlink-3526-"$SW"-port-$PORT\""
echo "{"
echo " match if binary-to-ascii(10,8, \":\", substring(option agent.circuit-id,4,2)) = \"0:$PORT\" and binary-to-ascii(16,8, \":\", substring(option agent.remote-id,2,6)) = \"${SW_MAC[SW]}\";"
echo "}"
done
done
echo "shared-network \"clients\" {"
echo "subnet 172.16.1.0 netmask 255.255.255.0 { }"
echo "subnet 192.168.1.0 netmask 255.255.255.0 {"
echo "option subnet-mask 255.255.255.0;"
echo "option broadcast-address 192.168.1.255;"
echo "option routers 192.168.1.254;"
for SW in `seq 1 9`
do
for PORT in `seq 1 24`
do
echo " pool {"
echo " range 192.168.1."$IP";"
echo " allow members of \"dlink-3526-"$SW"-port-"$PORT\"";"
echo " }"
let IP=IP+1
done
done
echo " }"
echo "}"