было бы круто на уровне ядра.
чтоб было монолитно и не костыляво.
ядро сказало "да" и тут же запустился скрипт, или это из области фантастики?
безопасность и прочая лабуда
ну скажем делается раз в 5 минут проверка пингом IP2 и если он не доступен то Стирается правило в табле :
text
IP2="192.168.1.1"
if ping -c1 $IP2; then
# пингуется
: # пустой оператор нужен для синтаксиса
else
# не пингуется
echo "не пингуется, TODO здесь нужно правила переписывать
fi
if ping -c1 $IP2; then # пингуется
: # пустой оператор нужен для синтаксиса
else # не пингуется
echo "не пингуется, TODO здесь нужно правила переписывать"
fi
Тогда уж
text
if ! ping -c1 $IP2 1>/dev/null 2>/dev/null; then # не пингуется
echo "не пингуется, TODO здесь нужно правила переписывать"
fi
bormant, я шаблончик сделал, который и сам по себе работает, и видно, как его дальше менять. Ну ваш вариант тоже годен. Как недостаток(ИМХО) -- он молча выполняется.
[quote=yuriisa][quote="lone_wolf"]думаю это придется делать через скриптик с проверками
можете "озвучить"?[/quote]
к сожалению я в написании скриптов так же селен как в балете :[
но общяя концепция такова :
ну скажем делается раз в 5 минут проверка пингом IP2 и если он не доступен то Стирается правило в табле :
[console]iptables -t nat -I PREROUTING --dport 1126 -j DNAT --to IP2:1126
iptables -I FORWARD -d IP2 --dport 1126 -j ACCEPT[/console]
и добавляет новое :
[console]iptables -t nat -I PREROUTING --dport 1126 -j DNAT --to IP3:1126
iptables -I FORWARD -d IP3 --dport 1126 -j ACCEPT[/console][/quote]
При попытке прописать правило в таблицу выдает сообщение "iptables v1.4.8: unknown option `--dport'", в хелпе по iptables нет описание команды `--dport', связано ли это с версией ОС или iptables, или ошибка в самом тексте правила?
При попытке прописать правило в таблицу выдает сообщение "iptables v1.4.8: unknown option `--dport'", в хелпе по iptables нет описание команды `--dport', связано ли это с версией ОС или iptables, или ошибка в самом тексте правила?
признаю допустил косяк надо так :
[console]iptables -t nat -I PREROUTING -p tcp --dport 1126 -j DNAT --to IP2:1126
iptables -I FORWARD -d IP2 -p tcp --dport 1126 -j ACCEPT[/console]
ну так как неизвестно по какому протоколу идут пакеты я для наглядности написал tcp
признаю допустил косяк надо так :
[console]iptables -t nat -I PREROUTING -p tcp --dport 1126 -j DNAT --to IP2:1126
iptables -I FORWARD -d IP2 -p tcp --dport 1126 -j ACCEPT[/console]
ну так как неизвестно по какому протоколу идут пакеты я для наглядности написал tcp
ну вот тут ясно видно что пракеты на статический ip уходят
[console]Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
12 624 ACCEPT tcp -- * * 0.0.0.0/0 XXX.XXX.XXX.XXX tcp dpt:1130
28 1456 ACCEPT tcp -- * * 0.0.0.0/0 XXX.XXX.XXX.XXX tcp dpt:1126[/console]
Тоесть по этому правилу пакеты которые приходят на статический ip шлюза с линуксом порт 1126 (ip1:1126) перебрасываются на ip2:1130, и наоборот пакеты в ответ пришедшие с ip2:1130 уходят на ip1:1126 ?
хотя я тут почитал интернет и оказалось что я был прав только на половину...
ну в общем пробуем сделать так :
1 - убираем правило FORWARD
2 - делаем вот так :
[console]iptables -t nat -I PREROUTING -p tcp -d IP1 --dport 1126 -j DNAT --to IP2:1130
iptables -t nat -I POSTROUTING -d IP2 -p tcp --dport 1130 -j SNAT --to-source IP1[/console]
З.ы. не гарантирую что все получится, но по логике вроди должно работать :[
Теперь возник вопрос №2:
Как написать скрипт, чтоб проверял какой из ip адрес доступен (ip2 или ip3) и если ip2 недоступен, то эти правила удалялись и прописывались для переброса с ip1 на ip3.
хотя я тут почитал интернет и оказалось что я был прав только на половину...
ну в общем пробуем сделать так :
1 - убираем правило FORWARD
2 - делаем вот так :
[console]iptables -t nat -I PREROUTING -p tcp -d IP1 --dport 1126 -j DNAT --to IP2:1130
iptables -t nat -I POSTROUTING -d IP2 -p tcp --dport 1130 -j SNAT --to-source IP1[/console]
З.ы. не гарантирую что все получится, но по логике вроди должно работать :[
спасибо! сначала написал а потом увидел ваше сообщение :) у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter :)
спасибо! сначала написал а потом увидел ваше сообщение у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter
ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.