Страницы

вторник, 8 ноября 2016 г.

BASH: Генерация строк с двумя переменными.

В качестве примера приведена генерация конфигурации iptables цепочки nat .
Внимание! Пример с IPtables не особо хороший. При объемном количестве правил IPtables лучше использовать ipset. Будет описано позже.



IP адреса изменены

Задача

Необходимо сгенерировать конфигурационный файл для iptables с несколькими переменными.

В качестве переменных используем того кого будем nat и IP адрес для src nat.

Необходимо получить такую конструкцию

iptables -t nat -N STB-NAT-172.16.0.253
iptables -t nat -A POSTROUTING -s 10.199.252.0/23 -j STB-NAT-172.16.0.253
iptables -t nat -A STB-NAT-172.16.0.253 -d 172.16.15.0/20 -j RETURN
iptables -t nat -A STB-NAT-172.16.0.253 -d 10.199.0.0/16 -j RETURN
iptables -t nat -A STB-NAT-172.16.0.253 -j SNAT --to-source 172.16.0.253

где

172.16.0.253 - IP адрес в который производится NAT
10.199.252.0/23 - сеть клиенты которой nat'ятся в IP 172.16.0.253

Исходные данные
root@vm-deep:~/scripts/nat# ls -al                  
drwxr-xr-x 2 root root   4096 ноя  8 14:20 .
drwxr-xr-x 6 root root   4096 ноя  8 12:18 ..
-rw-r--r-- 1 root root   1626 ноя  8 12:26 IPADDRESS
-rwxr-xr-x 1 root root    999 ноя  8 14:19 NatCfgGeneratorNEW.sh
-rw-r--r-- 1 root root   1993 ноя  8 14:03 nets

nets - файл с сетями
IPADDRESS - Файл с IP адресами
NatCfgGeneratorNEW.sh - скрипт

Содержимое файла nets

10.199.0.0/23
10.199.2.0/23
10.199.4.0/23
10.199.6.0/23
10.199.8.0/23
10.199.10.0/23
10.199.12.0/23
10.199.14.0/23
10.199.16.0/23
10.199.18.0/23
......

Содержимое файла IPADDRESS

172.16.0.130
172.16.0.131
172.16.0.132
172.16.0.133
172.16.0.134
172.16.0.135
172.16.0.136
172.16.0.137
172.16.0.138
172.16.0.139
172.16.0.140
172.16.0.141
172.16.0.142
172.16.0.143
172.16.0.144
172.16.0.145
..............

Скрипт

#!/bin/bash
IPPOOL=IPADDRESS
IPS_ARRAY=( $(cat nets) )
IPSRC=`cat $IPPOOL | sort -u`
i=0
for IP in $IPSRC
        do
        echo -e "
iptables -t nat -N STB-NAT-$IP
iptables -t nat -A POSTROUTING -s ${IPS_ARRAY[i]} -j STB-NAT-$IP
iptables -t nat -A STB-NAT-$IP -d 172.16.15.0/20 -j RETURN
iptables -t nat -A STB-NAT-$IP -d 10.199.0.0/16 -j RETURN
iptables -t nat -A STB-NAT-$IP -j SNAT --to-source $IP
"
let i=i+1
done

Комментариев нет:

Отправить комментарий