Страница 1 из 1

wireguard с маркировкой маршрута по источнику, выбранным абонентам локальной сети

Добавлено: 09 ноя 2025, 15:02
ya
Для микротика:

Код: Выделить всё

/interface wireguard add listen-port=51806 mtu=1420 name=wg-Ekaterinburg private-key="приватный ключ"
/interface wireguard peers add allowed-address=0.0.0.0/0 comment=wireguard endpoint-address=162.159.193.1 endpoint-port=2408 interface=wg-Ekaterinburg persistent-keepalive=25s public-key="публичный ключ"
/ip address add address=172.16.0.2/32 interface=wg-Ekaterinburg network=172.16.0.2
/ip firewall nat add action=masquerade chain=srcnat out-interface=wg-Ekaterinburg comment="162.159.193.1 Erfterinburg"
/routing table add disabled=no fib name=vpn-Ekaterinburg
/ip route add comment=vpn-Ekaterinburg disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wg-Ekaterinburg pref-src="" routing-table=vpn-Ekaterinburg suppress-hw-offload=no
/ip firewall mangle add action=mark-routing chain=prerouting disabled=no src-address=192.168.99.99 dst-address-list=!allow-local-all protocol=tcp dst-port=443 new-routing-mark=vpn-Ekaterinburg passthrough=yes comment="Ekaterinburg"
Тоже самое для линукс:

Создайте конфигурационный файл /etc/wireguard/wg-Ekaterinburg.conf (клиентский)

Код: Выделить всё

[Interface]
ListenPort = 51806
MTU = 1420
PrivateKey = приватный ключ

[Peer]
PublicKey = публичный ключ
AllowedIPs = 0.0.0.0/0
Endpoint = 162.159.193.1:2408
PersistentKeepalive = 25
Запускаем WireGuard

Код: Выделить всё

sudo wg-quick up wg-Ekaterinburg
Назначение IP-адреса интерфейсу WireGuard

Код: Выделить всё

sudo ip address add 172.16.0.2/32 dev wg0
Настройка NAT (маскарадинг)

Код: Выделить всё

sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
Создайте таблицу маршрутизации (например, в файле /etc/iproute2/rt_tables добавьте):

Код: Выделить всё

100 vpn-Ekaterinburg
Затем добавьте маршруты:

Код: Выделить всё

sudo ip route add default via <gateway> dev wg0 table vpn-Ekaterinburg
sudo ip rule add from 172.16.0.2/32 table vpn-Ekaterinburg
Добавьте правило для маркировки трафика:

Код: Выделить всё

sudo iptables -t mangle -A PREROUTING -s 192.168.99.99 -p tcp --dport 443 -j MARK --set-mark 1000
Затем добавьте правило маршрутизации для маркированного трафика:

Код: Выделить всё

sudo ip rule add fwmark 1000 table vpn-Ekaterinburg

Re: wireguard с маркировкой маршрута по источнику, выбранным абонентам локальной сети

Добавлено: 22 ноя 2025, 22:59
ya
Для понимания маркировки маршрутов в $\text{iptables}$ важно знать, что она использует механизм **маркировки пакетов (Packet Marking)**, чтобы влиять на то, как ядро Linux обрабатывает сетевой трафик, в частности, как работает **маршрутизация (Routing)**.

## 🏷️ Основные Концепции

-----

### **1. Маркировка Пакетов ($\text{MARK}$)**

* **Что это:** Это простое целое число, которое присваивается сетевому пакету, когда он проходит через таблицу $\text{mangle}$ в $\text{iptables}$.
* **Где происходит:** Маркировка устанавливается с помощью цели ($\text{target}$) $\text{MARK}$ в цепочке ($\text{chain}$) $\text{PREROUTING}$ или $\text{OUTPUT}$ таблицы **$\text{mangle}$**.
* **Синтаксис:**
```bash
iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 10
```
Здесь пакету присваивается метка **10**.
* **Важно:** Эта метка **не** является частью самого IP-заголовка пакета; она существует только внутри ядра Linux.

### **2. Маршрутизация на Основе Политик ($\text{Policy Based Routing, PBR}$)**

* **Что это:** Это расширение стандартной маршрутизации. Обычно ядро использует только **адрес назначения** пакета для выбора маршрута. PBR позволяет выбирать маршрут на основе других критериев, включая **метку пакета ($\text{fwmark}$)**.
* **Как это работает:** PBR использует **таблицы маршрутизации (Routing Tables)**, помимо стандартных $\text{main}$, $\text{local}$ и $\text{default}$.

## 🗺️ Связь Маркировки и Маршрутизации

-----

Чтобы метка пакета повлияла на маршрутизацию, вы должны настроить два основных элемента:

### **1. Правила Маршрутизации ($\text{ip rule}$)**

Вы используете команду $\text{ip rule}$ (часть утилиты $\text{iproute2}$) для создания правил, которые указывают ядру, какую **таблицу маршрутизации** использовать для пакетов с определенной $\text{fwmark}$.

* **Пример:** Создать правило, которое для всех пакетов с меткой **10** будет использовать таблицу маршрутизации с номером **200**:
```bash
ip rule add fwmark 10 table 200
```
Здесь $\text{fwmark}$ (FireWall Mark) – это внутренняя метка, установленная $\text{iptables}$.

### **2. Таблица Маршрутизации (table 200)**

Затем вы создаете маршруты в этой новой таблице ($\text{200}$), чтобы указать, куда именно должны отправляться пакеты.

* **Пример:** Добавить маршрут по умолчанию (все отправлять) через шлюз $\text{192.168.1.1}$ в таблице $\text{200}$:
```bash
ip route add default via 192.168.1.1 dev eth1 table 200
```

## 🪜 Порядок Действий

-----

Весь процесс для перенаправления определенного трафика на другой шлюз выглядит так:

1. **Маркировка ($\text{iptables}$):**

* Пакеты, которые вы хотите маршрутизировать особым образом, помечаются с помощью **$\text{MARK}$** в таблице **$\text{mangle}$**.

<!-- end list -->

```bash
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10
```

*(Все пакеты на 80 порт получают метку 10.)*

2. **Правило ($\text{ip rule}$):**

* Создается правило, которое связывает эту метку ($\text{fwmark 10}$) с новой таблицей маршрутизации ($\text{200}$).

<!-- end list -->

```bash
ip rule add fwmark 10 table 200
```

3. **Маршруты ($\text{ip route}$):**

* В таблице $\text{200}$ определяются специальные маршруты, например, через другого провайдера/шлюз.

<!-- end list -->

```bash
ip route add default via 10.0.0.1 dev eth2 table 200
```

Таким образом, $\text{iptables}$ не маршрутизирует сам по себе, но он **маркирует** пакет, а система **$\text{ip rule}$ / $\text{ip route}$** использует эту маркировку для принятия решений о маршрутизации.