В качестве примера приведена генерация конфигурации 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
Внимание! Пример с 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
Комментариев нет:
Отправить комментарий