>Что касается bash-а -
>
>tablicca() { Вот ещё пример: как я у себя форварды портов клиентам на firehol (он сам - на баше) делал.
#Forward pords
fwd_mail() {
for pp in 110 25; do #pop3+smtp
##### vv---тут ошибка: dst адрес не проверяется, но не суть
dnat to "$3:$pp" inface "$2" src "$1" proto tcp dport "$((pp+${4:-0}))"
done
snat to "$PUBLIC_MYIP" outface eth2 src "$1" dst "$3"
}
do_mail_clients() {
#"Таблица" клиентов port-forwarding-а: pop3+smtp => внеш.сервер
fwd_mail "10.1.2.5 10.1.2.7 10.1.2.34" eth1 "$MAIL_SVR1"
fwd_mail "192.168.13.115" eth0 "$MAIL_SVR1"
#
MCLIENTS="192.168.13.52 192.168.13.96"
fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR2"
fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR3" 5000
fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR4" 6000
}
do_mail_clients #####(1)
### ROUTER:
router nat
#
fwd_mail() {
server "smtp pop3" accept dst "$3" inface "$2" src "$1"
}
do_mail_clients #####(2)
Вызов (1) генерирует несколько вызовов функций dnat и snat firehol. Они д.б. до первой "секции" router. Вызов (2) уже внутри секции router вызывает команды server с набором параметров... Изменение "генерируемых" команд - через переопределение "промежуточной функции. Цикл while read писать было скушно и утомительно, поэтому :) строки таблицы в виде вызовов своей функции (м.б. навеяно структурой самого firehol).