Jump to content

Recommended Posts

Posted (edited)

Доброго всем нового года!
Прикупил себе на днях Keenetic Hopper 3811. Задача была - wireguard vpn на свой сервер на загнивающем, плюс нормальная работа российских ип через прямое соединение провайдера. Для этих целей нообходимо разделить маршрутами то что будет заворачиваться в туннель, а что пойдет по прямому соединению.

Как оказалось (столкнулся впервые) что есть возможность получить список подсетей сегментов интернет Российского диапазона, порядка 11 тысяч записей. Записи в виде CIDR или диапазон от до.

Сразу же столкнулся с проблемами. 
Проблема номер один - попытка прописать статические маршруты.
Для получения файла с маршрутами для загрузки в роутер пользовался скриптом:

#!/usr/bin/env python3
# coding: utf-8
from ipaddress import IPv4Address, IPv4Network, ip_address, summarize_address_range
import sys
import os
import json
import requests

def main(country_code):

    networks = []
    filepath = os.path.dirname(sys.argv[0])
    result = filepath + '/ip_' + country_code + '.bat'
    url = 'https://stat.ripe.net/data/country-resource-list/data.json?resource=' + country_code
    ripe_ip = json.loads(requests.get(url).content)['data']['resources']['ipv4']

    with open(result, 'w') as out_file:
        for record in ripe_ip:
            if record.find('-') > -1:
                ips = record.split('-')
                ipaddr = list(summarize_address_range(IPv4Address(ips[0]), IPv4Address(ips[1])))
            else:
                ipaddr = [IPv4Network(record)]
            networks.extend(ipaddr)

        for line in list(networks):
            print("route ADD " + str(line.network_address) + " MASK " + str(line.netmask) + " 0.0.0.0")

if __name__ == "__main__":
    main("ru")


Понятное дело этот скрипт составляет список из ~11 тысяч строк...
При попытке загрузки на роутер есть ограничение в 1024 строки. Ну ок, я разбил файл на 11 файлов по одной тысяче и начал загружать. При загрузке 8 тысяч строк роутер повис... И отказался дальше загружать - ограничение прошивки. После перезагрузки остается 6 тысяч строк.
Очень жаль, но пришлось отказаться от работы со статическими маршрутами.

Как опытный пользователь интернета, после такого облома я полез изучать профильные форумы. Понял что мало кто сталкивается с подобными проблемами и находят какое то правильное решение. Один из вариантов был установка на роутер программы, которая загружает маршруты по протоколу BGP либо из какой то внешней AS, либо из файла. Ссылку на это решение прикрепляю:
https://github.com/DennoN-RUS/Bird4Static

Проблема номер два - для установки решения требуется установка Entware. На данном форуме есть инструкция по установке, и даже на сайте кинетика есть инструкция по установке. Но - она не работает. На шаге когда на размеченой флешкой в ext4 в папке /install размещен файл установки Entware (aarch64), при переключении накопителя на вкладке opkg согласно инструкции  - файл и папка install чудесным образом пропадают, и в логе чего то похожего на то что указано в инструкции - нет. (Версия KeeneticOS 4.2.4)
Соответственно ничего не устанавливается, сервер ssh на порту 222 не запускается. 

Попытался установить Bird4Static вручную, для этого сделал:
telnet 192.168.1.1
login
>exec sh
# команды установки Bird4Static по инструкции 
Все идет по плану до момента запуска расширения Ip4Static. Из за отсутсвия Entware не запускается служба.
Разбираться почему это не работает честно говоря желания не вызывает....

Плюнув на все написал программу на golang которая берет из бд RIPE российские адреса и прописывает маршурты 
Засунул запуск программы в крон на раз в сутки

для работы просит конфиг /opt/routing/config.json:

{
  "country_code": "RU",
  "file_path": "/opt/routing/subnets.txt",
  "interface": "ppp0",
  "ignored_subnets": [],
  "ignored_ips": []
}

интерфейс - имя интерфейса через который будут прописаны маршруты рф сегмента.
программа сначала удаляет маршруты которые есть в subnets.txt, затем делает запрос в бд RIPE, затем записываает subnets.txt, затем добавляет маршруты в роутер.
бинарь тоже надо размеситить туда же. Есть пока ошибки суммаризации маршрутов но в общем решение работает. 

Если интересно то могу как то допилить функционал, но без фанатизма.

 

Edited by OFFSIDE
Posted (edited)
7 часов назад, OFFSIDE сказал:

Есть пока ошибки суммаризации маршрутов но в общем решение работает. 

 

Исправил суммаризацию маршрутов

 

Edited by OFFSIDE
Posted (edited)

Инструкция по установке
Файлы config.json и routing_ripe разместить в директории на компьютере, например c:/routing
Установить компоненты системы, я сделал так:
image.thumb.png.4a80a6882f97c5820abb8dc0bd35deaa.png
Открыть страницу настройки OPKG, выбрать встроенный накопитель
image.png.68bd4c20454933fbd598230ea63b39ab.png
image.thumb.png.6a09d54c08c7e8268caaaa1d5150208d.png

Настройки сохранить.
Открыть приложения:
image.png.f3907b8b47b945e888ce5a05f04095a1.png

Выбрать встроенное хранилище
image.png.e898722978c7770be32ef0ec0d9a4c62.png

image.thumb.png.d8f2a91134ea1cb6ca8336430e958c55.png

Создать папку routing,  загрузить в нее 2 файла config.json и routing_ripe из папки c:/routing

Зайти на роутер через командную строку:

telnet 192.168.1.1

Выполнить команыды

exec sh

chmod +x /opt/routing/routing_ripe

командой /opt/routing/routing_ripe запустить процесс обновления маршрутов

командой
crontab -e
вызвать текстовый файл настройки планировщика
нажать i

написать сроку 
0 3 * * * ./opt/routing/routing_ripe
нажать два раза эскейп, набрать на клавиатуре :wq
готово

ПЫ.СЫ. В приоритетах подключений переносим ВПН наверх, к провайдеру оставляем внизу.

routing_ripe config.json

Edited by OFFSIDE
  • OFFSIDE changed the title to Роутинг РФ из RIPe для Keenetic Hopper 3811
Posted

И не знаю что было, решил роутер с нуля переустановить.

По инструкции скачал бин файл прошивки, сделал сброс конфигурации.

Псоле этого Entware установилась корректно и порт 222 поднялся.

Зашел на роутер, сделал

opkg update
opkg upgrade
opkg install mc
opkg install cron

Затем по инструкции постом выше установил и запустил routing_ripe
 

  • 9 months later...
Posted

Попробовал через routing_ripe - маршруты прописываются, но у меня конфигурация eth3 на провайдера и поверх nwg0 на VPN и через интерфейс маршрут не работает почему-то, требуется через шлюз, возможно ли добавить параметр шлюза или опубликовать исходник?

Так работает:

route add -net 77.88.0.0 netmask 255.255.192.0 gw 188.101.152.1

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

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.