# bird_list_ip Это скрипт написанный на Python3 для выгрузки пулов ip адресов, для bird2. # Установка (Debian) -- устанавливаем пакеты > sudo apt install -y git bird2 m4 -- добавляем поддержку brotli в python3 > apt -y install python3-pip\ > pip install brotli 2> /dev/null || pip install brotli --break-system-packages -- клонируем репозиторий > git clone https://git.alanbox.ru/alan/bird_list_ip.git /opt/bird_list_ip && chmod +x /opt/bird_list_ip/download.py -- правим Unit Systemd bird2 для работы с m4 > nano /usr/lib/systemd/system/bird.service > [Unit]\ > Description=BIRD Internet Routing Daemon\ > After=network.target\ >\ > [Service]\ > EnvironmentFile=/etc/bird/envvars\ > ExecStartPre=/bin/sh -c "/usr/bin/m4 /opt/bird > /etc/bird/bird.conf"\ > ExecStartPre=-/usr/lib/bird/prepare-environment\ > ExecStartPre=-/usr/sbin/bird -p\ > ExecReload=/bin/sh -c "/usr/bin/m4 /opt/bird > /etc/bird/bird.conf"\ > ExecReload=-/usr/sbin/birdc configure\ > ExecStart=/usr/sbin/bird -f -u $BIRD_RUN_USER -g $BIRD_RUN_GROUP $BIRD_ARGS\ > Restart=on-abort\ >\ > [Install]\ > WantedBy=multi-user.target\ -- пример конфигурации bird2 на m4, для работы со списками > nano /opt/bird > log syslog {error, fatal};\ > router id ~~**1.1.1.1**~~;\ >\ > protocol device {\ > }\ >\ > protocol direct {\ >     ipv4; # Connect to default IPv4 table\ >     #ipv6; # ... and to default IPv6 table\ > }\ >\ > protocol kernel {\ >     learn;\ >     merge paths on;\ >     ipv4 { # Connect protocol to IPv4 table by channel\ >         import none; # Import to table, default is import all\ >         export filter { if (net.len > 0 && source=RTS_BGP) then { accept; } reject; }; # Export to protocol. default is export none\ >     };\ > }\ >\ > \# SUB m4\ > define(\`LOCATION', \`~~**741**~~')\ > include(\`/opt/bird_list_ip/unloading/bird2_v4.m4')\ >\ > filter border_in {\ >     if (net ~ 0.0.0.0/32) then { reject; }\ >     if (net ~ 127.0.0.0/8) then { reject; }\ >     if (net ~ 169.254.0.0/16) then { reject; }\ >     if (net ~ 224.0.0.0/4) then { reject; }\ >     if (net ~ 240.0.0.0/4) then { reject; }\ >     if (net.len > 0) then { accept; }\ >     reject;\ > }\ >\ > filter border_out {\ >     if (net ~ 0.0.0.0/32) then { reject; }\ >     if (net ~ 127.0.0.0/8) then { reject; }\ >     if (net ~ 10.0.0.0/8) then { reject; }\ >     if (net ~ 172.16.0.0/12) then { reject; }\ >     if (net ~ 192.168.0.0/16) then { reject; }\ >     if (net ~ 169.254.0.0/16) then { reject; }\ >     if (net ~ 224.0.0.0/4) then { reject; }\ >     if (net ~ 240.0.0.0/4) then { reject; }\ >     accept;\ > }\ >\ > define(\`BGP_BORDER', \`\ > protocol bgp $1 {\ >     ipv4 {\ >         import filter border_in;\ >         export filter border_out;\ >         next hop self;\ >     };\ >     router id $2;\ >     source address $2;\ >     local $2 as ~~**65431**~~;\ >     neighbor $3 as ~~**65949**~~;\ >     hold time 90;\ >     keepalive time 60;\ >     passive off;\ >     multihop;\ >     bfd no;\ > }\ > ')\ >\ > BGP_BORDER(\`CLIENT1', \`~~**10.8.1.1**~~', \`~~**10.8.1.2**~~')\ > BGP_BORDER(\`CLIENT1', \`~~**10.8.2.1**~~', \`~~**10.8.2.2**~~')\ > ...\ > BGP_BORDER(\`CLIENT99', \`~~**10.8.99.1**~~', \`~~**10.8.99.2**~~') ~~**Тык**~~ - это требует вашего внимания, для вашей конфигурации bird2 -- добавляем задачу в cron, обновление раз в неделю в среду в 5 утра > crontab -e > 0 5 * * 3 /usr/bin/python3 /opt/bird_list_ip/download.py > /dev/null 2>&1 # обновление списков ip адресов -- моя рекомендация cron, если у вас идет выгрузка по спискам RKN > crontab -e > 0 5 * * * /usr/bin/python3 /opt/bird_list_ip/download.py RKN > /dev/null 2>&1 # обновление списков ip адресов RKN\ > 5 5 10 * * /usr/bin/python3 /opt/bird_list_ip/download.py -RKN > /dev/null 2>&1 # обновление списков ip адресов -- запуск загрузки в ручную > python3 /opt/bird_list_ip/download.py # выгружаем все списки\ > python3 /opt/bird_list_ip/download.py RU # выгружаем конкретный список\ > python3 /opt/bird_list_ip/download.py RU JAPAN KOREA # выгружаем перечисленные списки\ > python3 /opt/bird_list_ip/download.py -RU # выгружаем все списки, кроме RU\ > python3 /opt/bird_list_ip/download.py -RU JAPAN KOREA # выгрузит списки JAPAN KOREA, -RU будет проигнорирован\ > python3 /opt/bird_list_ip/download.py -RU jaPAn korea # допускается указывать ключ в любом регистре -- добавляем bird2 в автозагрузку и запускаем > systemctl daemon-reload && systemctl enable bird.service && systemctl start bird.service **#####################################################################**\     Пример конфигурация списка выгрузки можно посмотреть в файле list в репозитории,\     так же допускается указывать url ссылку на конфигурацию первой строкой в файле list