LinuxForum.Fans
Тема

Сервер Linux как шлюз

Автор: yuriisa 65 сообщений 8592 просмотров
#370519
lone_wolf написал:
[quote="yuriisa"]спасибо! сначала написал а потом увидел ваше сообщение   у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.[/quote]
да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами :)

#370521
yuriisa написал:
[quote=lone_wolf][quote="yuriisa"]спасибо! сначала написал а потом увидел ваше сообщение   у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.[/quote]
да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами :)[/quote]
ясно, ну так что работает аль нет ? *SCRATCH*

#370524
lone_wolf написал:
[quote=yuriisa][quote=lone_wolf]
ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.

да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами :)[/quote]
ясно, ну так что работает аль нет ? *SCRATCH*[/quote]

с правилом
[console]iptables -I FORWARD 1 -d ip2 -p tcp -m tcp --dport 1130 -j ACCEPT[/console] работает, без него не пробовал..

#370525

теперь остался вопрос как написать скрипт, который будет проверять доступность ip2 и в случае если канал упал отправлять пакеты на ip3

#370741

Вот такой скрипт написал, проверьте, пожалуйста, алгоритм и синтаксис :)

Показать
[console]
#!/bin/bash
IP1="333.33.33.33"
IP2="222.22.22.22"
png1 = 1
png2 = 0

#запускаем скрипт для маршрутизации на ip1

while [ true ]; do
if [&png1 = 1] then;
if [ping -c 1 &IP1] then; #ip1 пингуется
&png1=1
else
&png1=0
#запускаем скрипт маршрутизации на ip2
&png2=1
fi
else
if [ping -c 1 &IP2] then; #ip2 пингуется
&png2=1
else
&png2=0
&png1=1
#запускаем скрипт маршрутизации на ip1
fi
fi



if [&png2 = 1] then;
if [ping -c 1 &IP2] then; #ip2 пингуется
&png2=1
else
&png2=0
#запускаем скрипт маршрутизации на ip1
&png1=1
fi
else
if [ping -c 1 &IP1] then; #ip1 пингуется
&png1=1
else
&png1=0
&png2=1
#запускаем скрипт маршрутизации на ip2
fi
fi

sleep 30

done
[/console]
#370743

1. Для обозначения переменной вместо «&» должно быть «$».
2. Обычно записывают так:

text

if УСЛОВИЕ;
 then
   КОМАНДА_1
 else
   КОМАНДА_2
fi
#370744
Lupo Alberto написал:
1. Для обозначения переменной вместо «&» должно быть «$».
2. Обычно записывают так:
text

if УСЛОВИЕ;
 then
   КОМАНДА_1
 else
   КОМАНДА_2
fi

Понял, спасибо, переделаю.
А в остальном правильно?

#370752
"yuriisa" написал:
А в остальном правильно?

Досконально разбираться некогда, но сразу видно несколько проблемных мест. Тем более, в данном случае, это очередной «велосипед».

#370852

=)))) Выделаете нат =) на второй ип IP2 на скок я понимаю.

text
iptables -t nat -A POSTROUTING --dst ip2 -p tcp --dport 1130 -j SNAT --to-source ip1:1126

Сталкивался =) просто в конце вы не увидете реальный ип клиента.
скорее на ip1 тоже есть выход в интернет. Поэтому при применении правила

text
iptables -t nat -I PREROUTING -p tcp -d IP1 --dport 1126 -j DNAT --to IP2:1130

пакеты доходят до ip2 но уходят через свой интерфейс интернета.
Тут надо пакеты метить и применять таблицы.

По остальному лучше не пинг проверять а доступность порта.

#371354

Да, реального ип клиента не вижу, но для меня это не критично, главное чтоб правила маршрутизации работали, ну и сам скрипт)
Подскажите, какой командой проверять доступность порта, спасибо!

#371369
"Kettler" написал:
Тут надо пакеты метить и применять таблицы.

Соглашусь, если не затруднит, пожалуйста примерчик в студию :)

#371370

"yuriisa" написал:
Подскажите, какой командой проверять доступность порта
если нужен список демонов, которые открыли порт и его слушают, то изнутри
[console]# lsof -i[/console]
снаружи — изучайте nmap
#371418
lone_wolf написал:
[quote="Kettler"]Тут надо пакеты метить и применять таблицы.

Соглашусь, если не затруднит, пожалуйста примерчик в студию :)[/quote]
Есть два сервера A и B между собой туннель 100мб. Но при этом у каждого свой выход в инет!
Скорость на В в инет около 1Мб а на А около 50Мб.
Надо радмином попадать на B каналом A =).

На А просто делаем маппинг:

text
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 4899 -j DNAT --to-destination 192.168.0.3:4899

А вот на В там таблицы и метки =).

text
#RADMIN GAMES
ip route add default via 192.168.201.1 table radmin
ip rule add fwmark 122 table radmin
ip route flush cache
iptables -t mangle -I PREROUTING -s 192.168.0.3 -p tcp --sport 4899 -j MARK --set-mark 122
iptables -A FORWARD -d 192.168.0.3 -p tcp --dport 4899 -j ACCEPT
iptables -A FORWARD -s 192.168.0.3 -p tcp --sport 4899 -j ACCEPT
text
root@router:~# cat /etc/iproute2/rt_tables 
#
# reserved values
#
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep
200    server
122 radmin

Подробнее уже где то было на этом форуме.

#371423

*SCRATCH* в принце понятно...

#371433

пробую запустить скрипт командой start

text

#!/bin/bash
IP1="11.11.11.11"
IP2="222.22.22.22"
png1 = 1
png2 = 0

#запускаем скрипт для маршрутизации на ip1 /home/script/ipmain start

while [ true ]; do if [$png1 = 1]; then if [ping -c 1 $IP1]; then #ip1 пингуется $png1=1 else $png1=0 #запускаем скрипт маршрутизации на ip2 /home/script/iprezerv start $png2=1 fi else if [ping -c 1 $IP2]; then #ip2 пингуется $png2=1 else $png2=0 $png1=1 #запускаем скрипт маршрутизации на ip1 /home/script/ipmain start fi fi if [$png2 = 1]; then if [ping -c 1 $IP2]; then #ip2 пингуется $png2=1 else $png2=0 #запускаем скрипт маршрутизации на ip1 /home/script/ipmain start $png1=1 fi else if [ping -c 1 $IP1]; then #ip1 пингуется $png1=1 else $png1=0 $png2=1 #запускаем скрипт маршрутизации на ip2 /home/script/iprezerv start fi fi sleep 30

done

появляются такие сообщения:

[console]
root@sk:~# /etc/init.d/scriptip start
/etc/init.d/scriptip: line 4: png1: command not found
/etc/init.d/scriptip: line 5: png2: command not found
/etc/init.d/scriptip: line 11: [: missing `]'
/etc/init.d/scriptip: line 23: [ping: command not found
/etc/init.d/scriptip: line 27: =0: command not found
/etc/init.d/scriptip: line 28: =1: command not found
/etc/init.d/scriptip: line 36: [: missing `]'
/etc/init.d/scriptip: line 48: [ping: command not found
/etc/init.d/scriptip: line 52: =0: command not found
/etc/init.d/scriptip: line 53: =1: command not found
[/console]

Подскажите,пожалуйста, где в скрипте ошибки?

#371436
"yuriisa" написал:
if [ пробел $png1 = 1 пробел ];
"yuriisa" написал:
$png1=1

тут доллар лишний.

те же ошибки разбросаны по всему скрипту.

#371437
drBatty написал:
[quote="yuriisa"]if [ пробел $png1 = 1 пробел ];
"yuriisa" написал:
$png1=1

тут доллар лишний.

те же ошибки разбросаны по всему скрипту.[/quote]

Понял, спасибо!)

#371439
"yuriisa" написал:
png1 = 1
png2 = 0

А здесь лишними являются пробелы. Они-то и вызывают эту ошибку:

"yuriisa" написал:
/etc/init.d/scriptip: line 4: png1: command not found
/etc/init.d/scriptip: line 5: png2: command not found
#371442

"allez" написал:
png2 = 0

А здесь лишними являются пробелы.
++
#371446

часть разобрался)
когда пишу

text
if [пробел ping -c 1 $IP1 пробел];  
 

дает ошибку
[console]/etc/init.d/scriptip: line 13: [: too many arguments
[/console]
когда пробелы убираю, тогда
[console]/etc/init.d/scriptip: line 13: [ping: command not found
[/console]
если пропинговать айпи в консоле, а не в скрипте ping -c 1 1.1.1.1 то все нормально.. :(

Войдите или зарегистрируйтесь, чтобы ответить.