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 id1.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 as65431;
neighbor $3 as65949;
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