diff --git a/README.md b/README.md index 3b72141..2fb0bc1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,123 @@ # bird_list_ip -Это скрипт написанный на Python3 для выгрузки пулов ip адресов по номерам AS. \ No newline at end of file +Это скрипт написанный на Python3 для выгрузки пулов ip адресов, для bird2. + +# Установка (Debian) + +-- устанавливаем пакеты +> sudo apt install -y git bird2 m4 + +-- клонируем репозиторий +> 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 адресов + +-- запуск загрузки в ручную +> 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 # выгружаем перечисленные списки + +-- добавляем bird2 в автозагрузку и запускаем +> systemctl daemon-reload && systemctl enable bird.service && systemctl start bird.service + +**#####################################################################**\ +    Пример конфигурация списка выгрузки можно посмотреть в файле list в репозитории,\ +    так же допускается указывать url ссылку на конфигурацию первой строкой в файле list