Jump to content

Обход блокировок с использованием BGP


Recommended Posts

Коллеги, вопрос. Пользовался методом Александра когда подключение к удаленному серверу было по IPIP туннелю. Перешел на WireGuard, теперь в логе такая же ошибка как у топик стартера. Если вернуть тип туннеля опять на IPIP то списки получает и маршрутизирует, проблема только если отправлять трафик на гейтвей wiregurd.

 

Янв 22 11:22:13
 
bird4
filters, line 40: Invalid gw address
Янв 22 11:22:13
 
bird4
Core::Syslog: last message repeated 4 times.
Янв 22 11:22:13
 
bird4
...
Янв 22 11:22:13
 
bird4
filters, line 40: Invalid gw address
Янв 22 11:22:13
 
bird4
...

 

Пробовал указывать не gw = 192.168.200.2 а имя интерефейса ifname= "nwg0", но тогда bird стартует без ошибки, но обновления списков не происходит и таблицы не заполняются.

Что можно сделать, не хочу менять тип туннеля с wireguard на другой.

Link to comment
Share on other sites

  • 8 months later...

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

Сейчас тоже столкнулся с этим. Есть 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

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

Вообще, если кому интересно - могу опубликовать свой набор скриптов "антизапрет" :)

Edited by Mr.Weegley
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

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