Ziceam in postul de mai devreme ca io stiu scripting pentru basic stuff, dar gasii o solutie care pare sa faca ce trebuie:
#!/bin/bash let j=0 let t=1 let s=20 let k=0 p=(`echo {a..z}{a..z}{a..z}`) for c in `seq 0 62`; do for i in `seq 0 4 255`; do ip tunnel add g${p[$c]}$t mode gre local 10.15.1.2 remote 10.16.1.2 ttl 255 key 1$k$c$i ip addr add 10.$s.0.$[$i+1]/30 peer 10.$s.0.$[$i+2]/30 dev g${p[$c]}$t ip link set dev g${p[$c]}$t up j=$[$j+1] c=$[$c+1] done let j=0 t=$[$t+1] s=$[$s+1] k=$[$k+1] done
La rulare (daca adaug echo in fata comenzilor de iproute2) zice asa:
sh s | grep key | uniq | wc -l 4032
Unde s este numele scriptului. Logic, nu? :))
Si cheile sunt unice, ca la asta imi era tarsala sa nu se incalece pe undeva:
sh s | grep key | cut -d" " -f 14 | uniq | wc -l 4032
Posibil BUG:
Din motive care imi scapa, din cand in cand, cand vrea sa adauge un tunel, kernelul intoarce ca nu poate adauga gre0 desi scriptul incearca cu totul alt nume. Se intampla cam de 5 ori la 4023 de iteratii si drept urmare adauga doar 4027 de tunele (ceea ce oricum este mai mult decat nevoie pe o singura masina)
Rulat cu set -x, outputul arata asa cand ii da cu virgula:
+ j=17 + c=61 + for i in '`seq 0 4 255`' + ip tunnel add gacj45 mode gre local 10.15.1.2 remote 10.16.1.2 ttl 255 key 1446168 add tunnel "gre0" failed: File exists + ip addr add 10.64.0.69/30 peer 10.64.0.70/30 dev gacj45 Cannot find device "gacj45" + ip link set dev gacj45 up Cannot find device "gacj45"
N-am nici o idee de ce face asta, ca pare totul ok ca si comenzi date. Se strica de la ip tunnel add si normal ca restul de comenzi nu merg ca numele ala de cap de tunel nu exista.
Si ca sa sterg turma de tunele, ii dau in cap cu asta:
for i in `ip a l | grep NONE | cut -d" " -f2 | cut -d"@" -f1`; do ip tunnel del $i; done
Now beware of my newly acquired mad scripting skillz :))