31

Спасибо!
Правила прописал, протестирую работу - отпишу

32

lone_wolf пишет:

признаю допустил косяк надо так :

 Консоль:
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

ну так как неизвестно по какому протоколу идут пакеты я для наглядности написал tcp

настроил  по вашему шаблону проброс портов, с ip1:1126 на  ip2:1130

 Консоль:
iptables -t nat -I PREROUTING -p tcp --dport 1126 -j DNAT --to IP2:1130
iptables -I FORWARD  -d IP2 -p tcp --dport 1130 -j ACCEPT

если посмотреть детальную статистику по правилам видно, что пакеты приходят:

 Консоль:
root@sk:~# iptables -L -t nat -v
Chain PREROUTING (policy ACCEPT 3 packets, 156 bytes)
pkts bytes target     prot opt in     out     source               destination
    3   156 DNAT       tcp  --  any    any     anywhere             anywhere            tcp dpt:1126 to:XXX.XXX.XXX.XXX:1130

Chain POSTROUTING (policy ACCEPT 8 packets, 454 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5 packets, 298 bytes)
pkts bytes target     prot opt in     out     source               destination

но на порт 1130 ip2 не доходят.. Подскажите, где может в чем может быть проблема?

33 (05.03.2014 18:39:37 отредактировано lone_wolf)

эм есче бы увидеть :

 Консоль:
iptables -L -n -t filter -v

Спросить - стыд минуты, не узнать - стыд всей жизни

34

lone_wolf пишет:

эм есче бы увидеть :

 Консоль:
iptables -L -n -t filter -v

XXX.XXX.XXX.XXX - статический ip на который настраиваем проброс портов (он же ip2)

 Консоль:
root@sk:~# iptables -L -n -t filter -v
Chain INPUT (policy ACCEPT 8619 packets, 1132K bytes)
pkts bytes target     prot opt in     out     source               destination                                                                             
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1130
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1126
12306 1515K ISPMGR     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                               

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

Chain OUTPUT (policy ACCEPT 9428 packets, 1400K bytes)
pkts bytes target     prot opt in     out     source               destination                                                                             
12363 1849K ISPMGR     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                                               

Chain ISPMGR (2 references)
pkts bytes target     prot opt in     out     source               destination

35

ну вот тут ясно видно что пракеты на статический ip уходят

 Консоль:
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

Спросить - стыд минуты, не узнать - стыд всей жизни

36

lone_wolf пишет:

ну вот тут ясно видно что пракеты на статический ip уходят

 Консоль:
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

Тоесть по этому правилу пакеты которые приходят на статический ip шлюза с линуксом порт 1126 (ip1:1126) перебрасываются на ip2:1130, и наоборот пакеты в ответ пришедшие с ip2:1130 уходят на ip1:1126 ?

37

хотя я тут почитал интернет и оказалось что я был прав только на половину...
ну в общем пробуем сделать так :
1 - убираем правило FORWARD
2 - делаем вот так :

 Консоль:
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

З.ы. не гарантирую что все получится, но по логике вроди должно работать   ah

Спросить - стыд минуты, не узнать - стыд всей жизни

38

получилось так:
IP1 - адрес шлюза с линуксом
IP2 - адрес на интернет канале 1
IP3 - адрес на интернет канале 2

переброс пакетов с ip1:1126 на  ip2:1130 и обратно c ip2:1130 на ip1:1126

 Консоль:
iptables -t nat -A PREROUTING --dst ip1 -p tcp --dport 1126 -j DNAT --to-destination ip2:1130

iptables -I FORWARD 1 -d ip2 -p tcp -m tcp --dport 1130 -j ACCEPT

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

Теперь возник вопрос №2:
Как написать скрипт, чтоб проверял какой из ip адрес доступен (ip2 или ip3) и если ip2 недоступен, то эти правила удалялись и прописывались  для переброса с ip1 на ip3.

39

lone_wolf пишет:

хотя я тут почитал интернет и оказалось что я был прав только на половину...
ну в общем пробуем сделать так :
1 - убираем правило FORWARD
2 - делаем вот так :

 Консоль:
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

З.ы. не гарантирую что все получится, но по логике вроди должно работать   ah

спасибо! сначала написал а потом увидел ваше сообщение ab  у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter ab

40

yuriisa пишет:

спасибо! сначала написал а потом увидел ваше сообщение   у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.

Спросить - стыд минуты, не узнать - стыд всей жизни

41

lone_wolf пишет:
yuriisa пишет:

спасибо! сначала написал а потом увидел ваше сообщение   у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.

да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами ab

42

yuriisa пишет:
lone_wolf пишет:
yuriisa пишет:

спасибо! сначала написал а потом увидел ваше сообщение   у вас все правильно, только я пользуясь чужим примером добавил разрешающее правило FORWARD таблицы filter

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.

да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами ab

ясно, ну так что работает аль нет ?  bw

Спросить - стыд минуты, не узнать - стыд всей жизни

43

lone_wolf пишет:
yuriisa пишет:
lone_wolf пишет:

ну я изначально и советовал в цепочку FORWARD таблицы Filter добавить правило прохождения пакета.

да, все верно. я имел ввиду разницу между написанным мною и последней версией написанного вами ab

ясно, ну так что работает аль нет ?  bw

с правилом

 Консоль:
iptables -I FORWARD 1 -d ip2 -p tcp -m tcp --dport 1130 -j ACCEPT
работает, без него не пробовал..

44

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

45

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

+ открыть спойлер

 Консоль:

#!/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

46 (07.03.2014 18:22:01 отредактировано Lupo Alberto)

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

if УСЛОВИЕ;
 then
   КОМАНДА_1
 else
   КОМАНДА_2
fi
Был, был и весь вышел...

47

Lupo Alberto пишет:

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

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

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

48

yuriisa пишет:

А в остальном правильно?

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

Был, был и весь вышел...

49

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

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

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

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

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

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

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

50

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

51

Kettler пишет:

Тут надо пакеты метить и применять таблицы.

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

Спросить - стыд минуты, не узнать - стыд всей жизни

52

yuriisa пишет:

Подскажите, какой командой проверять доступность порта

если нужен список демонов, которые открыли порт и его слушают, то изнутри

 Консоль:
# lsof -i

снаружи — изучайте nmap

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

53

lone_wolf пишет:
Kettler пишет:

Тут надо пакеты метить и применять таблицы.

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

Есть два сервера A и B между собой туннель 100мб. Но при этом у каждого свой выход в инет!
Скорость на В в инет около 1Мб а на А около 50Мб.
Надо радмином попадать на B каналом A =).

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

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

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

#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
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

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

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

54

bw  в принце понятно...

Спросить - стыд минуты, не узнать - стыд всей жизни

55

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

#!/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

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

 Консоль:

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

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

56

yuriisa пишет:

if [   пробел    $png1 = 1   пробел     ];

yuriisa пишет:

$png1=1

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

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

57

drBatty пишет:
yuriisa пишет:

if [   пробел    $png1 = 1   пробел     ];

yuriisa пишет:

$png1=1

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

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

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

58

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

59

allez пишет:

    png2 = 0

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

++

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

60

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

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

дает ошибку

 Консоль:
/etc/init.d/scriptip: line 13: [: too many arguments

когда пробелы убираю, тогда
 Консоль:
/etc/init.d/scriptip: line 13: [ping: command not found

если пропинговать айпи в консоле, а не в скрипте ping -c 1 1.1.1.1 то все нормально..  ac