240700
This commit is contained in:
55
src/content/blog/06-mikrotik-2wan.md
Normal file
55
src/content/blog/06-mikrotik-2wan.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Рекурсивная маршрутизация
|
||||||
|
|
||||||
|
|
||||||
90
src/content/blog/07-BOT-telegram-forward.md
Normal file
90
src/content/blog/07-BOT-telegram-forward.md
Normal file
@@ -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)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user