Jump to content

Нюансы при использовании BGP


Recommended Posts

Ответа так и нет?

Сейчас тоже столкнулся с этим. Есть Wireguard туннель, но его ip вызывает эту же ошибку.

bird4.conf:

Скрытый текст
log syslog all;
log stderr all;

router id 31.28.238.119; # current external ip

function martians()
{
    return net ~ [ 100.64.0.0/10+,
                   169.254.0.0/16+,
                   172.16.0.0/12+,
                   192.168.0.0/16+,
                   10.0.0.0/8+,
                   127.0.0.0/8+,
                   224.0.0.0/4+,
                   240.0.0.0/4+,
                   0.0.0.0/32-,
                   0.0.0.0/0{0,7}
                 ];
}

protocol device {
    scan time 15;
}

protocol kernel kernel_routes {
    scan time 60;
    import none;
    export all;
    kernel table 1000; # kernel routing table number
}

protocol static static_routes {
    import all;
    #route 192.168.X.Y/24 via 192.168.A.B;
}

protocol bgp antifilter {
    import filter {
        if martians() then reject;
        gw = 172.16.0.2; # override route nexthop //Эта строка вызывает ошибку
        accept;
    };
    export none;
    local as 64999; # local default as-number
    neighbor 163.172.210.8 as 65432;
    multihop;
    hold time 240;
}

 

ifconfig nwg0:
 

Скрытый текст
-bash-5.1# ifconfig nwg0
nwg0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1

 

Как я понимаю, ему не нравится что адрес один и тот же и у шлюза и у меня.

Link to comment
Share on other sites

Как понимаю, вопрос на данный момент не актуален? Странно. И всё же, поделюсь своим изысканием.

Поднят Wireguard интерфейс. ВПН в сторону Cloudflare. Довольно скоро я узнал, что они дают только 1Гб трафика (на день? месяц? год? - ещё не понял) Но тут не об этом.

При настройке Wireguard наш интерфейс имеет адрес 172.16.0.2 и  P-t-P:172.16.0.2

Почему то, этот адрес не нравится Bird'у и при следовании инструкциям тут и в этой теме я не получал заполнение таблицы маршрутами. Выяснилось, что ошибку вызывает строка

gw = 172.16.0.2; # override route nexthop

Гугление дало ещё пару вариантов её замены:

        #bgp_next_hop = 172.16.0.2;
        #ifname = "nwg0";

Но и они не работают.

В итоге, появилось неочевидное решение:

protocol static static_routes {
    import all;
    route 163.172.210.8/32 via 172.16.0.2;
}

И каким то образом это даёт желаемый эффект. НО

При таком раскладе в лог спамится строка вида:

bird4: KRT: Received route with strange next-hop

для КАЖДОГО маршрута. И спамится она туда ПОСТОЯННО. При каждом сканировании ядром таблицы, как я понимаю. Вроде бы, этот спам ни на что не влияет, потому можно просто указать scan time 0:

protocol kernel kernel_routes {
    scan time 0;
    import none;
    export all;
    kernel table 1000; # kernel routing table number
}

Пока трафик ещё оставался - вроде работало. По прошествии нескольких дней с момента настройки таблица на месте.

Может, кому то пригодится.

А может, кто то сможет это дело понять и подсказать что нужно. Вроде бы где то проскакивало что next-hop должен быть доступен via direct или как то так, и что бы bird и kernel были счастливы нужно указать что этот интерфейс всегда up или что то в этом духе. Прочитал это мельком, не придал значения в тот момент. И как это сделать тоже не знаю.

Link to comment
Share on other sites

11 час назад, Mr.Weegley сказал:

Поднят Wireguard интерфейс. ВПН в сторону Cloudflare. Довольно скоро я узнал, что они дают только 1Гб трафика (на день? месяц? год? - ещё не понял)

Ремарка в сторону Cloudflare. В профиле сидит клиент, а сам профиль Cloudflare.

Скрытый текст

718002287_-1.jpg.cb6acfb387cea80e4acf94117f58ece7.jpg

 

Link to comment
Share on other sites

11 час назад, vasek00 сказал:

Ремарка в сторону Cloudflare. В профиле сидит клиент, а сам профиль Cloudflare.

  Показать содержимое

718002287_-1.jpg.cb6acfb387cea80e4acf94117f58ece7.jpg

 

А ведь и правда... Спасибо за пинок:) Нашел в чем дело.

В /opt/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh строка, создающая пресловутую 1000-ю таблицу в общем случае не должна быть привязана к интерфейсу. (Ну, или должна, если это реально необходимо)

Тогда получим и на роутере:

-bash-5.1# traceroute -n rutracker.org
traceroute to rutracker.org (195.82.146.214), 30 hops max, 38 byte packets
 1  172.16.0.1  49.299 ms  49.451 ms  49.580 ms
 2  172.68.9.1  50.409 ms  50.080 ms  50.267 ms
И т.д...

И на клиенте:

Трассировка маршрута к rutracker.org [195.82.146.214]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  192.168.0.1
  2    49 ms    49 ms    49 ms  172.16.0.1
  3    51 ms    59 ms   145 ms  172.68.9.1

И т.д...

 

Link to comment
Share on other sites

  • 1 month later...
В 25.10.2021 в 19:11, Mr.Weegley сказал:

Поднят Wireguard интерфейс. ВПН в сторону Cloudflare. Довольно скоро я узнал, что они дают только 1Гб трафика (на день? месяц? год? - ещё не понял)

Безлимит там по трафику.

Link to comment
Share on other sites

  • 2 months later...

Коллеги,

Столкнулся с тем, что иногда Wireguard на Cloudflare перестаёт работать. Просто в логе куча строк о просроченном рукопожатии или что то такое. Не помню, да и не важно. Ни ребуты, ни пересоздание подключения с нуля не помогают. Через время начинает работать сам. При этом интерфейс остаётся up, и скрипты в ifstatechanged.d не выполняются. С вытекающей невозможностью остановить bird от маршрутизацию через него оттуда. А у меня, например он роутит целыми ASN'ами :) Например, Гугл - весь идёт через Cloudflare. Ибо живу в Крыму, и неработающий Play Market и частые 403 от гугла на всяких сайтах достали.

Так вот такой вот костыль я для себя накрутил сегодня. Может, кому пригодится.

Создал скриптик CF-Watchdog.sh вот с таким содержанием:

Скрытый текст

#!/opt/bin/bash

#logger -t "Antizapret debug" "Running CF-watchdog..."

if /opt/bin/ping -c 1 -4 -I nwg0 engage.cloudflareclient.com > /dev/null #if we have successfull ping via nwg0
    then
        if pgrep bird4 > /dev/null #and bird is running
            then
                : #then all goes well. do nothing :)
                #logger -t "Antizapret System" "All going well..."
                #echo Wg ping is ok, and Bird is running
            else #if we have ping via nwg0 but bird is not running, than we assume that we had no ping during previous checks and stopped it.
                logger -t "Antizapret System" "Got ping thru Cloudflare!"
                /opt/usr/bin/tg_say.sh $'<b>Antizapret System</b>\n&#10071; Got ping thru Cloudflare! Starting Bird...'
                /opt/etc/init.d/S04bird1-ipv4 start
            fi
else #if we have NO ping via nwg0
        #logger -t "Antizapret debug" "ping command not successfull..."
        if pgrep bird4 >& /dev/null #and bird is running now, then it's better to stop it...
            then
                logger -t "Antizapret System" "No ping thru Cloudflare! Stopping bird..."
                /opt/usr/bin/tg_say.sh $'<b>Antizapret System</b>\n&#10071; No ping thru Cloudflare!'
                /opt/etc/init.d/S04bird1-ipv4 stop
            fi
fi

 

Символьную ссылку на него в /opt/etc/cron.1min и имеем проверку работоспособности маршрутизации через Cloudflare каждую минуту, и по необходимости остановку/перезапуск bird

Сорян, что комменты на буржуйском - мне так почему то удобнее...

Link to comment
Share on other sites

В 25.10.2021 в 20:11, Mr.Weegley сказал:

Почему то, этот адрес не нравится Bird'у и при следовании инструкциям тут и в этой теме я не получал заполнение таблицы маршрутами. Выяснилось, что ошибку вызывает строка

Столкнулся с такой же проблемой. Удалось выяснить что это из-за маски соединения Wireguard:

nwg0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.13.13.3  P-t-P:10.13.13.3  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1324  Metric:1
          RX packets:12533 errors:0 dropped:43 overruns:0 frame:0
          TX packets:11141 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50 
          RX bytes:8986444 (8.5 MiB)  TX bytes:1993636 (1.9 MiB)

В моем случае, в настройках соединения, в поле "Адрес" нужно было заменить подсеть "/32" на "/24", маска в соединении поменялась:

nwg0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.13.13.3  P-t-P:10.13.13.3  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1324  Metric:1
          RX packets:12535 errors:0 dropped:64 overruns:0 frame:0
          TX packets:11155 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50 
          RX bytes:8986628 (8.5 MiB)  TX bytes:1994316 (1.9 MiB)

На работу туннеля это не повлияло, если в "Приоритетах подключений" вручную перекинуть какое-либо устройство в профиль с соединением Wireguard - трафик идет через него, все ok.

Bird запустился без ошибок и таблица маршрутизации наполнилась:
 

~ # ip route list table 1000 | wc -l
20177

НО! На устройствах в сети все так же нет доступа к заблокированным ресурсам (
Может кто-то сталкивался или может подсказать что еще нужно настроить?

Edited by rostislavzz
Link to comment
Share on other sites

12 часа назад, rostislavzz сказал:

НО! На устройствах в сети все так же нет доступа к заблокированным ресурсам (

Может кто-то сталкивался или может подсказать что еще нужно настроить?

На трейсы бы глянуть с устройств и с самого кинетика. Только сейчас обратил внимание, что при установке подсети /24 при создании интерфейса через веб-морду, а так же командой ip - маска ставится /32. И только ifconfig смог установить её в /24. Но разницы не вижу. Работает и так и так при условии, что устанавливает BGP-сессию через туннель.

Как только включил лог - снова спам о "странном" next-hop...

Где то читал, что bird вообще плохо дружит с P-t-P интерфейсами. Да и по большому счёту он для другого пердназначен, вроде как. Сколько ни читал документации, форумов и мануалов по нему - складывается впечатление, что мы с его помощью из пушки по воробьям лупим :)

Edited by Mr.Weegley
Link to comment
Share on other sites

  • 1 month later...

@Mr.Weegley

мне тут @_villi_ показал конфиг, который нормально работает, если указать ifname

Скрытый текст
.......
protocol kernel kernel_routes {
    learn;
    scan time 60;
    import none;
    export all;
    kernel table 1000; # kernel routing table number
    device routes yes;
}
.......
protocol bgp antifilter {
    import filter {
        if martians() then reject;
        ifname = "nwg0";
        accept;
    };
    export all;
    local as 64999; # local default as-number
    neighbor 45.154.73.71 as 65432;
    multihop;
    hold time 240;
    preference 250;
}

 

изменения только в protocol kernel kernel_routes ну и в bgp antifilter указать ifname. остальное не менять. тогда и ругани нет в логах и все работает

ключевая строка, которая позволяет всему этому делу работать - device routes yes

Edited by DennoN
  • Thanks 1
  • Upvote 2
Link to comment
Share on other sites

4 часа назад, DennoN сказал:

@Mr.Weegley

мне тут @_villi_ показал конфиг, который нормально работает, если указать ifname

  Показать содержимое
.......
protocol kernel kernel_routes {
    learn;
    scan time 60;
    import none;
    export all;
    kernel table 1000; # kernel routing table number
    device routes yes;
}
.......
protocol bgp antifilter {
    import filter {
        if martians() then reject;
        ifname = "nwg0";
        accept;
    };
    export all;
    local as 64999; # local default as-number
    neighbor 45.154.73.71 as 65432;
    multihop;
    hold time 240;
    preference 250;
}

 

изменения только в protocol kernel kernel_routes ну и в bgp antifilter указать ifname. остальное не менять. тогда и ругани нет в логах и все работает

ключевая строка, которая позволяет всему этому делу работать - device routes yes

Дай Вам обоим Бог здоровья, добра и пива! Вот была же мысль что просто не докопался до какой то одной волшебной строчки :)

Зы

А как тут карму юзеру поднять? :)

ЗЗы

Надо это как то в общую инструкцию добавить.

Edited by Mr.Weegley
Link to comment
Share on other sites

  • 10 months later...

для wireguard удалось настроить, но куда вписать хук

ip rule add table 1000 , который в оригинальной инструкции надо добавлять в /opt/etc/ndm/openvpn-route-up.d/010-add_antizapret_route.sh

Но для wg я так понял оно не сработает

Link to comment
Share on other sites

В 11.04.2022 в 12:45, DennoN сказал:

@Mr.Weegley

мне тут @_villi_ показал конфиг, который нормально работает, если указать ifname

  Показать содержимое
.......
protocol kernel kernel_routes {
    learn;
    scan time 60;
    import none;
    export all;
    kernel table 1000; # kernel routing table number
    device routes yes;
}
.......
protocol bgp antifilter {
    import filter {
        if martians() then reject;
        ifname = "nwg0";
        accept;
    };
    export all;
    local as 64999; # local default as-number
    neighbor 45.154.73.71 as 65432;
    multihop;
    hold time 240;
    preference 250;
}

 

изменения только в protocol kernel kernel_routes ну и в bgp antifilter указать ifname. остальное не менять. тогда и ругани нет в логах и все работает

ключевая строка, которая позволяет всему этому делу работать - device routes yes

Данный способ тоже помог с OpenVPN, огромное Вам спасибо!!!!

Link to comment
Share on other sites

5 часов назад, Kazantsev сказал:

Как решить?

Screenshot_2024-04-06-00-01-01-549_com.keenetic.kn-edit.jpg

Попробуйте как выше указано:

1.

protocol kernel kernel_routes {
    learn;
    scan time 60;
    ipv4 {
	import none;
	export all;
	};
    kernel table 1000; # kernel routing table number
    #device routes yes; #####
}

^^^^^^^^^^^^^ Закоментить или раскомментить device routes (Уже не помню, почему у меня закомментировано)

2.

protocol bgp antifilter {
    import filter {
        if martians() then reject;
	ifname = "wg0";
	#accept;
	reject;
	};

    export none;
    local as 64999; # local default as-number
    neighbor 45.154.73.71 as 65432;
    multihop;
    hold time 240;
    preference 250;
}

^^^^^^^^^^^ добавить ifname = "wg0";

Не знаю, помогает ли чем-то multihop, но у меня работало без ошибок.

А вообще, если работает, несмотря на эту запись в логе, то отправить лог в null и концы в воду...

Edited by Mr.Weegley
Link to comment
Share on other sites

  • 3 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...