The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
проблема с маршрутизацией через двух провайдеров, !*! ivan1970, 10-Мрт-11, 22:46  [смотреть все]
Есть сеть с роутером (Fedora 14) подключенным к двум провайдерам. На одного default route, а на второго нужно завернуть web-траффик.
Настраиваю так
echo "1" > /proc/sys/net/ipv4/ip_forward
#echo 202 prov2 >> /etc/iproute2/rt_tables
/sbin/ip route add default via $PROV2_GATEWAY dev $PROV2_IFACE table prov2
/sbin/ip rule add fwmark 12 table prov2
/sbin/iptables -t mangle -A PREROUTING -i $LAN_IFACE -p tcp --dport 80 -j MARK --set-mark 12
/sbin/iptables -t nat -A POSTROUTING -o $PROV1_IFACE -j SNAT --to-source $PROV1_IP
/sbin/iptables -t nat -A POSTROUTING -o $PROV2_IFACE -j SNAT --to-source $PROV2_IP
Не работает!
Я уже настраивал так один сервер (там Fedora 11) - все идеально работает, настройки переписываю один к одному.
Что интересно, если завернуть траффик отдельно взятой машины на второго провайдера
/sbin/ip rule add from 10.10.10.20 table prov2
работает.
При журналировании пакетов в таблице mangle картину такая: пакеты на 80 порт на web-сервер (mail.ru) наблюдаю в цепочках PREROUTING, FORWARD, POSTROUTING. Ответные пакеты от web-сервера наблюдаю в цепочке PREROUTING, а больше нигде не наблюдаю (ни в FORWARD, ни в INPUT)
  • проблема с маршрутизацией через двух провайдеров, !*! PavelR, 23:22 , 10-Мрт-11 (1)
    не важно, как вы настраиваете, важно _что получается в результате_.

    В этом вам помогут команды:

    tcpdump (куда в действительности уходят пакеты, с какими адресами, возвращаются ли обратно)

    iptables --line -nvL
    iptables --line -nvL -t mangle
    iptables --line -nvL -t nat


    ip ru sh

    ip ro sh table prov2
    ip ro sh table main
    ip ro sh table default

    и "ip ro sh" прочих таблиц, имеющихся в вашей системе.


    // вот вы привели команду iptables -A .... - это добавление в конец списка. Дык что в нем в начале - телепатические способности - стоят слишком дорого, боюсь не потянете оплатить.

  • проблема с маршрутизацией через двух провайдеров, !*! ivan1970, 17:31 , 12-Мрт-11 (2)
    Приведенные команды - практически вся настройка роутера

    # iptables --line -nvL
    Chain INPUT (policy ACCEPT 2326 packets, 240K bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    Chain FORWARD (policy ACCEPT 32 packets, 4687 bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    Chain OUTPUT (policy ACCEPT 2931 packets, 369K bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    # iptables --line -nvL -t mangle
    Chain PREROUTING (policy ACCEPT 118 packets, 11926 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1        0     0 MARK       tcp  --  vlan10 *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 MARK set 0xc

    Chain INPUT (policy ACCEPT 86 packets, 7239 bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    Chain FORWARD (policy ACCEPT 32 packets, 4687 bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    Chain OUTPUT (policy ACCEPT 53 packets, 5557 bytes)
    num   pkts bytes target     prot opt in     out     source               destination

    Chain POSTROUTING (policy ACCEPT 85 packets, 10244 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    # iptables --line -nvL -t nat
    Chain PREROUTING (policy ACCEPT 34 packets, 3171 bytes)
    num   pkts bytes target     prot opt in     out     source               destination

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

    Chain POSTROUTING (policy ACCEPT 5 packets, 314 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1        2   108 SNAT       all  --  *      eth0  0.0.0.0/0            0.0.0.0/0           to:192.168.2.2
    2        0     0 SNAT       all  --  *      vlan256  0.0.0.0/0            0.0.0.0/0           to:192.168.42.251

    # ip ro sh table prov2
    default via 192.168.42.249 dev vlan256

    # ip ro sh table main
    192.168.42.248/29 dev vlan256  proto kernel  scope link  src 192.168.42.251
    192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.2
    10.10.10.0/24 dev vlan10  proto kernel  scope link  src 10.10.10.1
    169.254.0.0/16 dev eth0  scope link  metric 1004
    169.254.0.0/16 dev vlan10  scope link  metric 1009
    169.254.0.0/16 dev vlan256  scope link  metric 1010
    default via 192.168.2.1 dev eth0

    # ip ro sh table default
    пусто
    других таблиц нет

    вместо tcpdump предпочитаю пользоваться журналированием в iptables (для меня нагляднее)
    iptables -t mangle -A PREROUTING -d 77.88.21.3 -j LOG --log-prefix "pre_to_yandex "
    iptables -t mangle -A FORWARD -d 77.88.21.3 -j LOG --log-prefix "fw_to_yandex "
    iptables -t mangle -A POSTROUTING -d 77.88.21.3 -j LOG --log-prefix "post_to_yandex "
    iptables -t mangle -A PREROUTING -s 77.88.21.3 -j LOG --log-prefix "pre_from_yandex "
    iptables -t mangle -A FORWARD -s 77.88.21.3 -j LOG --log-prefix "fw_from_yandex "
    iptables -t mangle -A POSTROUTING -s 77.88.21.3 -j LOG --log-prefix "post_from_yandex "

    если добавить правило
    ip rule add from 10.10.10.40 table prov2
    то
    # ip ru sh
    0:      from all lookup local
    32765:  from 10.10.10.40 lookup prov2
    32766:  from all lookup main
    32767:  from all lookup default

    tail -f /var/log/messages | grep yandex
    Mar 12 16:08:41 fedora kernel: [ 2392.511394] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0
    Mar 12 16:08:41 fedora kernel: [ 2392.511422] fw_to_yandex IN=vlan10 OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0 MARK=0xc
    Mar 12 16:08:41 fedora kernel: [ 2392.511439] post_to_yandex IN= OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15647 DF PROTO=TCP SPT=4121 DPT=80 WINDOW=64956 RES=0x00 ACK FIN URGP=0 MARK=0xc
    Mar 12 16:08:41 fedora kernel: [ 2392.551352] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=40 TOS=0x00 PREC=0x00 TTL=57 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0
    Mar 12 16:08:41 fedora kernel: [ 2392.551381] fw_from_yandex IN=vlan256 OUT=vlan10 SRC=77.88.21.3 DST=10.10.10.40 LEN=40 TOS=0x00 PREC=0x00 TTL=56 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0
    Mar 12 16:08:41 fedora kernel: [ 2392.551395] post_from_yandex IN= OUT=vlan10 SRC=77.88.21.3 DST=10.10.10.40 LEN=40 TOS=0x00 PREC=0x00 TTL=56 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0

    т.е. все работает
    а вот если добавить правило
    ip rule add  fwmark 12 table prov2
    то
    # ip ru sh
    0:      from all lookup local
    32765:  from all fwmark 0xc lookup prov2
    32766:  from all lookup main
    32767:  from all lookup default

    tail -f /var/log/messages | grep yandex
    Mar 12 16:25:03 fedora kernel: [ 3373.812830] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
    Mar 12 16:25:03 fedora kernel: [ 3373.812866] fw_to_yandex IN=vlan10 OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0xc
    Mar 12 16:25:03 fedora kernel: [ 3373.812884] post_to_yandex IN= OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=20010 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0xc
    Mar 12 16:25:03 fedora kernel: [ 3373.852495] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=48 TOS=0x00 PREC=0x00 TTL=57 ID=28184 DF PROTO=TCP SPT=80 DPT=4201 WINDOW=65535 RES=0x00 ACK SYN URGP=0
    Mar 12 16:25:06 fedora kernel: [ 3376.821614] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=20018 DF PROTO=TCP SPT=4201 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
    Мистика?

    • проблема с маршрутизацией через двух провайдеров, !*! PavelR, 18:10 , 12-Мрт-11 (3)

      > # iptables --line -nvL -t mangle
      > Chain PREROUTING (policy ACCEPT 118 packets, 11926 bytes)
      > 1        0      0 MARK       tcp   --  vlan10 *       0.0.0.0/0  0.0.0.0/0   tcp dpt:80 MARK set 0xc

      Ну дык - а что, разве не заметно, что счетчики на правиле по нулям ? почему так происходит, мне пока не понятно.


      > вместо tcpdump предпочитаю пользоваться журналированием в iptables (для меня нагляднее)

      ну ладно, фиг с ним, смирюсь с таким извращением, всякое бывает. Действительно, видно в форварде, откуда пришел и куда уходит пакет. :-)

      Но:

      >т.е. все работает
      >а вот если добавить правило

      я нифига не вижу разницы между tail -f /var/log/messages | grep yandex в двух ваших случаях.
      А в случае с tcpdump вы бы сразу увидели, что оно пошло не по eth0 как вы ожидаете.
      Вот собственно, и ваше "мне так нагляднее".

      И в первом и во втором грепах пакеты маршрутизируются на vlan256.

      Не забывайте делать "ip ro flu ca". (ip route flush cache ?).

      • проблема с маршрутизацией через двух провайдеров, !*! ivan1970, 19:46 , 12-Мрт-11 (4)
        > Ну дык - а что, разве не заметно, что счетчики на правиле
        > по нулям ? почему так происходит, мне пока не понятно.

        Потому что эта команда выполнена сразу после перезагрузки роутера.
        сейчас выглядит так
        Chain PREROUTING (policy ACCEPT 73148 packets, 8184K bytes)
        num   pkts bytes target     prot opt in     out     source               destination
        1       34  2525 LOG        all  --  *      *       0.0.0.0/0            77.88.21.3          LOG flags 0 level 4 prefix `pre_to_yandex '
        2       35  3074 LOG        all  --  *      *       77.88.21.3           0.0.0.0/0           LOG flags 0 level 4 prefix `pre_from_yandex '
        3      699 96153 MARK       tcp  --  vlan10 *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 MARK set 0xc

        > ну ладно, фиг с ним, смирюсь с таким извращением, всякое бывает. Действительно,
        > видно в форварде, откуда пришел и куда уходит пакет. :-)

        ;-)

        > я нифига не вижу разницы между tail -f /var/log/messages | grep yandex
        > в двух ваших случаях.

        Разница в том, что во втором случае ответы от яндекса приходят их видно в таблице PREROUTING
        Mar 12 16:25:03 fedora kernel: [ 3373.852495] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=48 TOS=0x00 PREC=0x00 TTL=57 ID=28184 DF PROTO=TCP SPT=80 DPT=4201 WINDOW=65535 RES=0x00 ACK SYN URGP=0
        а больше эти пакеты нигде не наблюдаются, как будто они умирают в черном ящике с названием routing decision от того, что ядро по каким-то причинам не передает их в таблицу FORWARD

        > И в первом и во втором грепах пакеты маршрутизируются на vlan256.

        Правильно, только в первом случае все пакеты с машины 10.10.10.40 маршрутизируются на vlan256 и в браузере я вижу страницу. А во втором случае на vlan256 маршрутизируются пакеты на 80 порт от любой хоста с интерфейса vlan10 и страниц в браузере я не вижу :-(

        > Не забывайте делать "ip ro flu ca". (ip route flush cache ?).

        Не забываю ;-)


        • проблема с маршрутизацией через двух провайдеров, !*! PavelR, 21:10 , 12-Мрт-11 (5)

          >> я нифига не вижу разницы между tail -f /var/log/messages | grep yandex
          >> в двух ваших случаях.
          > Разница в том, что во втором случае ответы от яндекса приходят их
          > видно в таблице PREROUTING
          >Mar 12 16:25:03 fedora kernel: [ 3373.852495] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=48

          TOS=0x00 PREC=0x00 TTL=57 ID=28184 DF PROTO=TCP SPT=80 DPT=4201 WINDOW=65535 RES=0x00 ACK
          SYN URGP=0

          А ничего, что во втором случае они тоже приходят:

          Mar 12 16:08:41 fedora kernel: [ 2392.551352] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=40 TOS=0x00 PREC=0x00 TTL=57 ID=50487 DF PROTO=TCP SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0

          ?

          Правда там разница в флагах наличествует.. Так что - смотреть надо именно tcpdump-ом )

          > Правильно, только в первом случае все пакеты с машины 10.10.10.40 маршрутизируются на
          > vlan256 и в браузере я вижу страницу. А во втором случае
          > на vlan256 маршрутизируются пакеты на 80 порт от любой хоста с
          > интерфейса vlan10 и страниц в браузере я не вижу :-(

          Чувствуете разницу - в первом случае - все пакеты, во втором - на 80 порт?
          запустите tcpdump на внутреннем интерфейсе. Я полагаю что каких-то пакетов вы не учли, например DNS.

          • проблема с маршрутизацией через двух провайдеров, !*! ivan1970, 21:42 , 12-Мрт-11 (6)
            > А ничего, что во втором случае они тоже приходят:
            > Mar 12 16:08:41 fedora kernel: [ 2392.551352] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00
            > SRC=77.88.21.3 DST=192.168.42.251 LEN=40 TOS=0x00 PREC=0x00 TTL=57 ID=50487 DF PROTO=TCP
            > SPT=80 DPT=4121 WINDOW=65534 RES=0x00 ACK URGP=0

            так и я о том же! Ответы от яндекса приходят, только роутер их в локалку не передает :-(
            и в таблице FORWARD их нет

            > Чувствуете разницу - в первом случае - все пакеты, во втором -
            > на 80 порт?
            > запустите tcpdump на внутреннем интерфейсе. Я полагаю что каких-то пакетов вы не
            > учли, например DNS.

            Хорошо, меняю
            iptables -t mangle -D PREROUTING -i vlan10 -p tcp --dport 80 -j MARK --set-mark 12
            на
            iptables -t mangle -I PREROUTING -s 10.10.10.40 -j MARK --set-mark 12
            смотрим
            iptables --line -nvL -t mangle
            Chain PREROUTING (policy ACCEPT 2268 packets, 212K bytes)
            num   pkts bytes target     prot opt in     out     source               destination
            1       63  3926 MARK       all  --  *      *       10.10.10.40            0.0.0.0/0           MARK set 0xc
            2       40  2813 LOG        all  --  *      *       0.0.0.0/0            77.88.21.3          LOG flags 0 level 4 prefix `pre_to_yandex '
            3       50  3794 LOG        all  --  *      *       77.88.21.3           0.0.0.0/0           LOG flags 0 level 4 prefix `pre_from_yandex '

            Т.е. опять маршрутизируем ВСЕ пакеты с хоста 10.10.10.40 на vlan256, только с помощью меток. Страницы не открываются. Даже пинги не проходят
            Mar 12 20:40:42 fedora kernel: [18713.668903] pre_to_yandex IN=vlan10 OUT= MAC=00:21:91:01:7a:14:00:03:47:7c:07:03:08:00 SRC=10.10.10.40 DST=77.88.21.3 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=2599 PROTO=ICMP TYPE=8 CODE=0 ID=512 SEQ=57276 MARK=0xc
            Mar 12 20:40:42 fedora kernel: [18713.668934] fw_to_yandex IN=vlan10 OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=2599 PROTO=ICMP TYPE=8 CODE=0 ID=512 SEQ=57276 MARK=0xc
            Mar 12 20:40:42 fedora kernel: [18713.668950] post_to_yandex IN= OUT=vlan256 SRC=10.10.10.40 DST=77.88.21.3 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=2599 PROTO=ICMP TYPE=8 CODE=0 ID=512 SEQ=57276 MARK=0xc
            Mar 12 20:40:43 fedora kernel: [18713.708482] pre_from_yandex IN=vlan256 OUT= MAC=00:21:91:01:7a:14:00:15:17:f8:50:b2:08:00 SRC=77.88.21.3 DST=192.168.42.251 LEN=60 TOS=0x00 PREC=0x00 TTL=58 ID=34471 PROTO=ICMP TYPE=0 CODE=0 ID=512 SEQ=57276




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру