From 5992fd4e1d5d22f9d55ca837660a62efca3c7fa3 Mon Sep 17 00:00:00 2001 From: krasi Date: Wed, 24 Jul 2024 16:27:36 +0300 Subject: [PATCH] 240700 --- src/content/blog/06-mikrotik-2wan.md | 55 +++++++++++++ src/content/blog/07-BOT-telegram-forward.md | 90 +++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 src/content/blog/06-mikrotik-2wan.md create mode 100644 src/content/blog/07-BOT-telegram-forward.md diff --git a/src/content/blog/06-mikrotik-2wan.md b/src/content/blog/06-mikrotik-2wan.md new file mode 100644 index 0000000..462f650 --- /dev/null +++ b/src/content/blog/06-mikrotik-2wan.md @@ -0,0 +1,55 @@ +--- +title: "MikroTik, 2 провайдера \ 2WAN, RouterOS 7" +summary: "2, 3 и даже более операторов на MikroTik RouterOS 7 с рекурсивной маршрутизацией и дополнительных проверок с помощью Netwatch, а так же отработкой динамических адресов от оператора." +date: "June 13 2024" +draft: false +tags: +- MikroTik +- Network +--- +## Таблицы маршрутизации + +Routing > Tables +Добавляем WAN1, WAN2, WAN3 + +```sh +/routing table +add disabled=no fib name=WAN1 +add disabled=no fib name=WAN2 +add disabled=no fib name=WAN3 +``` + +## Интерфейс листы + +Используется для группировки интерфейсов чтобы сократить количество правил и настроек в Firewall +Interface > Interface List +Создаем лист WAN и добавляем доверенные интерфейсы. + +```sh +/interface list +add name=LAN +add include=WAN1,WAN2,WAN3 name=WAN-ALL +/interface list member +add interface=bridgeLAN list=LAN +``` + +## Маркировка трафика + +IP > Firewall > Mangle + +```sh +/ip firewall mangle +add action=mark-connection chain=prerouting comment="Mark Connection WAN1" connection-mark=no-mark in-interface-list=WAN1 new-connection-mark=con-WAN1 passthrough=yes +add action=mark-connection chain=prerouting comment="Mark Connection WAN2" connection-mark=no-mark in-interface-list=WAN2 new-connection-mark=con-WAN2 passthrough=yes +add action=mark-connection chain=prerouting comment="Mark Connection WAN3" connection-mark=no-mark in-interface-list=WAN3 new-connection-mark=con-WAN3 passthrough=yes +add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN1 in-interface-list=!WAN-ALL new-routing-mark=WAN1 passthrough=yes +add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN2 in-interface-list=!WAN-ALL new-routing-mark=WAN2 passthrough=yes +add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN3 in-interface-list=!WAN-ALL new-routing-mark=WAN3 passthrough=yes +add action=mark-routing chain=output comment="Mark Roution Out WAN1" connection-mark=con-WAN1 new-routing-mark=WAN1 passthrough=yes +add action=mark-routing chain=output comment="Mark Roution Out WAN2" connection-mark=con-WAN2 new-routing-mark=WAN2 passthrough=yes +add action=mark-routing chain=output comment="Mark Roution Out WAN3" connection-mark=con-WAN3 new-routing-mark=WAN3 passthrough=yes +``` + +## Рекурсивная маршрутизация + + diff --git a/src/content/blog/07-BOT-telegram-forward.md b/src/content/blog/07-BOT-telegram-forward.md new file mode 100644 index 0000000..9f9b8ed --- /dev/null +++ b/src/content/blog/07-BOT-telegram-forward.md @@ -0,0 +1,90 @@ +--- +title: "Бот пересылки сообщений в группы телеграма" +summary: "Есть у меня куча групп и сильное не желание пересылать одно сообщения во все группы, потому я использую бот перессылки сообщений." +date: "June 13 2024" +draft: false +tags: +- Python +- Telegram +- BOT +--- +# Подготовка + +1. BotFaher берем токен + +2. Достаём ID групп и пользоватлей + +3. Пишем на питоне + +## Готовый скрипт + +```py +import logging +from aiogram import Bot, Dispatcher, types +from aiogram.types import ParseMode +from aiogram.utils import executor + +# Ваш токен от BotFather +API_TOKEN = 'YOUR_BOT_TOKEN' + +# Список ID групп, куда будут пересылаться сообщения +TARGET_GROUP_IDS = [-100, -100] # замените на реальные ID ваших целевых групп + +# Список ID разрешённых пользователей +ALLOWED_USER_IDS = [123456789, 123456789] # замените на реальные ID разрешённых пользователей + +# Настройка логирования +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +# Инициализация бота и диспетчера +bot = Bot(token=API_TOKEN, parse_mode=ParseMode.HTML) +dp = Dispatcher(bot) + +# Обработчик команды /start +@dp.message_handler(commands=['start']) +async def send_welcome(message: types.Message): + await message.reply("Привет! Я бот, который пересылает сообщения в группы.") + +# Обработчик всех типов сообщений для пересылки из личных сообщений боту +@dp.message_handler(content_types=types.ContentType.ANY) +async def forward_message(message: types.Message): + if message.chat.type == 'private': # Проверка, что сообщение пришло в личный чат + if message.from_user.id in ALLOWED_USER_IDS: # Проверка, что пользователь разрешён + for group_id in TARGET_GROUP_IDS: + try: + if message.content_type == types.ContentType.TEXT: + await bot.send_message(chat_id=group_id, text=message.text, disable_notification=True) + logger.info(f"Текстовое сообщение отправлено в группу {group_id}") + elif message.content_type == types.ContentType.PHOTO: + await bot.send_photo(chat_id=group_id, photo=message.photo[-1].file_id, caption=message.caption, disable_notification=True) + logger.info(f"Фото отправлено в группу {group_id}") + elif message.content_type == types.ContentType.DOCUMENT: + await bot.send_document(chat_id=group_id, document=message.document.file_id, caption=message.caption, disable_notification=True) + logger.info(f"Документ отправлен в группу {group_id}") + elif message.content_type == types.ContentType.VIDEO: + await bot.send_video(chat_id=group_id, video=message.video.file_id, caption=message.caption, disable_notification=True) + logger.info(f"Видео отправлено в группу {group_id}") + elif message.content_type == types.ContentType.AUDIO: + await bot.send_audio(chat_id=group_id, audio=message.audio.file_id, caption=message.caption, disable_notification=True) + logger.info(f"Аудио отправлено в группу {group_id}") + elif message.content_type == types.ContentType.VOICE: + await bot.send_voice(chat_id=group_id, voice=message.voice.file_id, caption=message.caption, disable_notification=True) + logger.info(f"Голосовое сообщение отправлено в группу {group_id}") + elif message.content_type == types.ContentType.VIDEO_NOTE: + await bot.send_video_note(chat_id=group_id, video_note=message.video_note.file_id, disable_notification=True) + logger.info(f"Видеозаметка отправлена в группу {group_id}") + else: + logger.warning(f"Тип сообщения {message.content_type} не поддерживается") + except Exception as e: + logger.error(f"Ошибка при отправке сообщения в группу {group_id}: {e}") + else: + logger.warning(f"Пользователь {message.from_user.id} не имеет доступа к боту") + await message.reply("У вас нет доступа к этому боту.") + +if __name__ == '__main__': + executor.start_polling(dp, skip_updates=True) +``` + + +