Add awg+mikrotik.md
This commit is contained in:
+866
@@ -0,0 +1,866 @@
|
|||||||
|
# Настройка MikroTik + Ubuntu + AmneziaWG + BGP
|
||||||
|
|
||||||
|
## Схема
|
||||||
|
|
||||||
|
```text
|
||||||
|
Клиенты LAN
|
||||||
|
192.168.0.0/24
|
||||||
|
|
|
||||||
|
v
|
||||||
|
MikroTik
|
||||||
|
192.168.0.3
|
||||||
|
AS 64999
|
||||||
|
|
|
||||||
|
| маршруты, полученные по BGP
|
||||||
|
| next-hop -> 192.168.0.253
|
||||||
|
v
|
||||||
|
Ubuntu 24.04
|
||||||
|
192.168.0.253
|
||||||
|
|
|
||||||
|
v
|
||||||
|
awg0
|
||||||
|
AmneziaWG
|
||||||
|
|
|
||||||
|
v
|
||||||
|
VPN / Internet
|
||||||
|
```
|
||||||
|
|
||||||
|
Внешний BGP peer:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Peer IP: 45.148.244.55
|
||||||
|
Remote AS: 65444
|
||||||
|
|
||||||
|
Local IP: 77.79.185.98
|
||||||
|
Local AS: 64999
|
||||||
|
```
|
||||||
|
|
||||||
|
Задача:
|
||||||
|
|
||||||
|
- MikroTik получает маршруты по BGP.
|
||||||
|
- Для всех полученных маршрутов next-hop заменяется на `192.168.0.253`.
|
||||||
|
- Ubuntu работает как шлюз в AmneziaWG.
|
||||||
|
- Клиентам не нужно знать про Ubuntu.
|
||||||
|
- Маршруты нигде не дублируются вручную.
|
||||||
|
- SNAT на MikroTik автоматически применяется ко всему трафику, чей next-hop — `192.168.0.253`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 1. Ubuntu: установка AmneziaWG
|
||||||
|
|
||||||
|
Устанавливаем зависимости:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
|
||||||
|
apt install -y \
|
||||||
|
git \
|
||||||
|
build-essential \
|
||||||
|
dkms \
|
||||||
|
linux-headers-$(uname -r) \
|
||||||
|
iptables \
|
||||||
|
resolvconf
|
||||||
|
```
|
||||||
|
|
||||||
|
Клонируем kernel module:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /root
|
||||||
|
|
||||||
|
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git
|
||||||
|
```
|
||||||
|
|
||||||
|
Устанавливаем через DKMS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /root/amneziawg-linux-kernel-module/src
|
||||||
|
|
||||||
|
make dkms-install
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dkms status
|
||||||
|
```
|
||||||
|
|
||||||
|
Загружаем модуль:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
modprobe amneziawg
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsmod | grep amneziawg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2. Установка awg-tools
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /root
|
||||||
|
|
||||||
|
git clone https://github.com/amnezia-vpn/amneziawg-tools.git
|
||||||
|
cd amneziawg-tools/src
|
||||||
|
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
awg --version
|
||||||
|
awg-quick --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 3. Конфигурация AWG
|
||||||
|
|
||||||
|
Создаем каталог:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /etc/amnezia
|
||||||
|
```
|
||||||
|
|
||||||
|
Создаем конфиг:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/amnezia/awg0.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = CLIENT_PRIVATE_KEY
|
||||||
|
Address = 10.9.9.2/32
|
||||||
|
MTU = 1280
|
||||||
|
Table = off
|
||||||
|
|
||||||
|
Jc = ...
|
||||||
|
Jmin = ...
|
||||||
|
Jmax = ...
|
||||||
|
S1 = ...
|
||||||
|
S2 = ...
|
||||||
|
H1 = ...
|
||||||
|
H2 = ...
|
||||||
|
H3 = ...
|
||||||
|
H4 = ...
|
||||||
|
|
||||||
|
[Peer]
|
||||||
|
PublicKey = SERVER_PUBLIC_KEY
|
||||||
|
PresharedKey = ...
|
||||||
|
Endpoint = VPN_SERVER_IP:PORT
|
||||||
|
AllowedIPs = 0.0.0.0/0
|
||||||
|
PersistentKeepalive = 25
|
||||||
|
```
|
||||||
|
|
||||||
|
Важно:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
Table = off
|
||||||
|
```
|
||||||
|
|
||||||
|
Мы не хотим, чтобы `awg-quick` заменял default route самой Ubuntu.
|
||||||
|
|
||||||
|
Права:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod 600 /etc/amnezia/awg0.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Поднимаем туннель:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
awg-quick up awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
awg show
|
||||||
|
ip addr show awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем выход через VPN:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl --interface awg0 https://ifconfig.io
|
||||||
|
```
|
||||||
|
|
||||||
|
или:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -4 --interface awg0 https://ipinfo.io/ip
|
||||||
|
```
|
||||||
|
|
||||||
|
Должен вернуться IP VPN-сервера.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 4. Автозапуск AWG
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl enable awg-quick@awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
Можно сразу включить:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl enable --now awg-quick@awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status awg-quick@awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 5. Статический IP Ubuntu
|
||||||
|
|
||||||
|
Предполагаем:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Ubuntu: 192.168.0.253/24
|
||||||
|
MikroTik: 192.168.0.3
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример Netplan:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
network:
|
||||||
|
version: 2
|
||||||
|
ethernets:
|
||||||
|
ens18:
|
||||||
|
dhcp4: false
|
||||||
|
addresses:
|
||||||
|
- 192.168.0.253/24
|
||||||
|
routes:
|
||||||
|
- to: default
|
||||||
|
via: 192.168.0.3
|
||||||
|
nameservers:
|
||||||
|
addresses:
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
```
|
||||||
|
|
||||||
|
Применить:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
netplan try
|
||||||
|
```
|
||||||
|
|
||||||
|
или:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
netplan apply
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip -br addr
|
||||||
|
ip route
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 6. Включаем forwarding на Ubuntu
|
||||||
|
|
||||||
|
Временно:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sysctl -w net.ipv4.ip_forward=1
|
||||||
|
```
|
||||||
|
|
||||||
|
Постоянно:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat >/etc/sysctl.d/99-router.conf <<EOF
|
||||||
|
net.ipv4.ip_forward=1
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Применяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sysctl --system
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sysctl net.ipv4.ip_forward
|
||||||
|
```
|
||||||
|
|
||||||
|
Должно быть:
|
||||||
|
|
||||||
|
```text
|
||||||
|
net.ipv4.ip_forward = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 7. Policy routing на Ubuntu
|
||||||
|
|
||||||
|
Поскольку Ubuntu сама должна использовать обычный интернет через MikroTik, а транзитный трафик от MikroTik должен уходить в AWG, создаем отдельную routing table.
|
||||||
|
|
||||||
|
Добавляем имя таблицы:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "100 awg" >> /etc/iproute2/rt_tables
|
||||||
|
```
|
||||||
|
|
||||||
|
Добавляем default route через AWG:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip route add default dev awg0 table awg
|
||||||
|
```
|
||||||
|
|
||||||
|
Все пакеты, пришедшие через LAN-интерфейс `ens18`, отправляем в таблицу `awg`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip rule add iif ens18 lookup awg priority 100
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip rule
|
||||||
|
```
|
||||||
|
|
||||||
|
Должно быть:
|
||||||
|
|
||||||
|
```text
|
||||||
|
0: from all lookup local
|
||||||
|
100: from all iif ens18 lookup awg
|
||||||
|
32766: from all lookup main
|
||||||
|
32767: from all lookup default
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем таблицу:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip route show table awg
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаем:
|
||||||
|
|
||||||
|
```text
|
||||||
|
default dev awg0 scope link
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 8. iptables на Ubuntu
|
||||||
|
|
||||||
|
Разрешаем forwarding:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -A FORWARD \
|
||||||
|
-i ens18 \
|
||||||
|
-o awg0 \
|
||||||
|
-s 192.168.0.0/24 \
|
||||||
|
-j ACCEPT
|
||||||
|
```
|
||||||
|
|
||||||
|
Обратный трафик:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -A FORWARD \
|
||||||
|
-i awg0 \
|
||||||
|
-o ens18 \
|
||||||
|
-d 192.168.0.0/24 \
|
||||||
|
-m conntrack \
|
||||||
|
--ctstate RELATED,ESTABLISHED \
|
||||||
|
-j ACCEPT
|
||||||
|
```
|
||||||
|
|
||||||
|
NAT при выходе через AWG:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t nat -A POSTROUTING \
|
||||||
|
-o awg0 \
|
||||||
|
-s 192.168.0.0/24 \
|
||||||
|
-j MASQUERADE
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -L FORWARD -n -v
|
||||||
|
iptables -t nat -L POSTROUTING -n -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 9. MSS для AWG
|
||||||
|
|
||||||
|
Если `awg0` использует MTU `1280`, можно дополнительно ограничить MSS.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t mangle -A FORWARD \
|
||||||
|
-i ens18 \
|
||||||
|
-o awg0 \
|
||||||
|
-p tcp \
|
||||||
|
--tcp-flags SYN,RST SYN \
|
||||||
|
-j TCPMSS \
|
||||||
|
--set-mss 1200
|
||||||
|
```
|
||||||
|
|
||||||
|
Обратное направление:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t mangle -A FORWARD \
|
||||||
|
-i awg0 \
|
||||||
|
-o ens18 \
|
||||||
|
-p tcp \
|
||||||
|
--tcp-flags SYN,RST SYN \
|
||||||
|
-j TCPMSS \
|
||||||
|
--set-mss 1200
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t mangle -L FORWARD -n -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 10. Сохранение iptables
|
||||||
|
|
||||||
|
Устанавливаем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install -y iptables-persistent
|
||||||
|
```
|
||||||
|
|
||||||
|
Сохраняем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
netfilter-persistent save
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /etc/iptables/rules.v4
|
||||||
|
```
|
||||||
|
|
||||||
|
После изменения правил:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
netfilter-persistent save
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 11. Автоматическое восстановление policy routing
|
||||||
|
|
||||||
|
`iptables-persistent` не сохраняет:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip rule
|
||||||
|
ip route table awg
|
||||||
|
```
|
||||||
|
|
||||||
|
Их удобно добавлять через `PostUp/PostDown` в `awg0.conf`.
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = ...
|
||||||
|
Address = 10.9.9.2/32
|
||||||
|
MTU = 1280
|
||||||
|
Table = off
|
||||||
|
|
||||||
|
PostUp = ip route add default dev %i table awg
|
||||||
|
PostUp = ip rule add iif ens18 lookup awg priority 100
|
||||||
|
|
||||||
|
PostDown = ip rule del iif ens18 lookup awg priority 100
|
||||||
|
PostDown = ip route del default dev %i table awg
|
||||||
|
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Тогда при:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl start awg-quick@awg0
|
||||||
|
```
|
||||||
|
|
||||||
|
маршрутизация будет создаваться автоматически.
|
||||||
|
|
||||||
|
Проверить после перезапуска:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip rule
|
||||||
|
ip route show table awg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 12. MikroTik RouterOS 6: BGP instance
|
||||||
|
|
||||||
|
Создаем BGP instance:
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/routing bgp instance
|
||||||
|
add name=awg-bgp \
|
||||||
|
as=64999 \
|
||||||
|
router-id=77.79.185.98
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 13. BGP input filter
|
||||||
|
|
||||||
|
Все маршруты от внешнего peer должны использовать Ubuntu `192.168.0.253` как next-hop.
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/routing filter
|
||||||
|
add chain=awg-bgp-in \
|
||||||
|
action=accept \
|
||||||
|
set-in-nexthop=192.168.0.253
|
||||||
|
```
|
||||||
|
|
||||||
|
Важно: **не ставить `set-routing-mark`**.
|
||||||
|
|
||||||
|
Маршруты должны попадать в обычную main routing table.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 14. BGP peer
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/routing bgp peer
|
||||||
|
add name=awg-routes \
|
||||||
|
instance=awg-bgp \
|
||||||
|
remote-address=45.148.244.55 \
|
||||||
|
remote-as=65444 \
|
||||||
|
update-source=77.79.185.98 \
|
||||||
|
multihop=yes \
|
||||||
|
in-filter=awg-bgp-in
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем:
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/routing bgp peer print status
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 15. Проверка полученных BGP-маршрутов
|
||||||
|
|
||||||
|
Например:
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/ip route print detail where dst-address=149.154.160.0/20
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаем:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ADb
|
||||||
|
dst-address=149.154.160.0/20
|
||||||
|
gateway=192.168.0.253
|
||||||
|
gateway-status=192.168.0.253 reachable
|
||||||
|
received-from=awg-routes
|
||||||
|
```
|
||||||
|
|
||||||
|
Главное:
|
||||||
|
|
||||||
|
```text
|
||||||
|
gateway=192.168.0.253
|
||||||
|
```
|
||||||
|
|
||||||
|
и маршрут должен быть активным:
|
||||||
|
|
||||||
|
```text
|
||||||
|
A
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 16. Проблема асимметричной маршрутизации
|
||||||
|
|
||||||
|
Без дополнительного SNAT возникает такая ситуация:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Windows 192.168.0.6
|
||||||
|
|
|
||||||
|
v
|
||||||
|
MikroTik 192.168.0.3
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Ubuntu 192.168.0.253
|
||||||
|
|
|
||||||
|
v
|
||||||
|
AWG
|
||||||
|
```
|
||||||
|
|
||||||
|
Но ответ Ubuntu отправляет напрямую:
|
||||||
|
|
||||||
|
```text
|
||||||
|
AWG
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Ubuntu
|
||||||
|
|
|
||||||
|
+--------> 192.168.0.6
|
||||||
|
```
|
||||||
|
|
||||||
|
потому что Ubuntu и Windows находятся в одной `/24`.
|
||||||
|
|
||||||
|
Получается:
|
||||||
|
|
||||||
|
```text
|
||||||
|
туда:
|
||||||
|
PC -> MikroTik -> Ubuntu -> AWG
|
||||||
|
|
||||||
|
обратно:
|
||||||
|
AWG -> Ubuntu -> PC
|
||||||
|
```
|
||||||
|
|
||||||
|
Это ломает симметрию TCP.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 17. Универсальный SNAT на MikroTik
|
||||||
|
|
||||||
|
Нам нужно делать SNAT **для любого трафика, чей выбранный gateway — `192.168.0.253`**.
|
||||||
|
|
||||||
|
Для этого используем `route-dst`.
|
||||||
|
|
||||||
|
Сначала маркируем соединение:
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/ip firewall mangle
|
||||||
|
add chain=postrouting \
|
||||||
|
src-address=192.168.0.0/24 \
|
||||||
|
route-dst=192.168.0.253 \
|
||||||
|
connection-mark=no-mark \
|
||||||
|
action=mark-connection \
|
||||||
|
new-connection-mark=via-awg \
|
||||||
|
passthrough=yes \
|
||||||
|
comment="Mark connections routed via AWG"
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь универсальный SNAT:
|
||||||
|
|
||||||
|
```routeros
|
||||||
|
/ip firewall nat
|
||||||
|
add chain=srcnat \
|
||||||
|
src-address=192.168.0.0/24 \
|
||||||
|
connection-mark=via-awg \
|
||||||
|
action=src-nat \
|
||||||
|
to-addresses=192.168.0.3 \
|
||||||
|
comment="SNAT traffic routed via AWG"
|
||||||
|
```
|
||||||
|
|
||||||
|
Таким образом **не нужны address-list и отдельные NAT-правила для каждого BGP-префикса**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 18. Как это работает
|
||||||
|
|
||||||
|
Например BGP присылает:
|
||||||
|
|
||||||
|
```text
|
||||||
|
149.154.160.0/20
|
||||||
|
```
|
||||||
|
|
||||||
|
Input filter превращает маршрут в:
|
||||||
|
|
||||||
|
```text
|
||||||
|
149.154.160.0/20 via 192.168.0.253
|
||||||
|
```
|
||||||
|
|
||||||
|
Клиент обращается:
|
||||||
|
|
||||||
|
```text
|
||||||
|
192.168.0.6 -> 149.154.167.99
|
||||||
|
```
|
||||||
|
|
||||||
|
MikroTik выбирает:
|
||||||
|
|
||||||
|
```text
|
||||||
|
next-hop = 192.168.0.253
|
||||||
|
```
|
||||||
|
|
||||||
|
`route-dst` это видит:
|
||||||
|
|
||||||
|
```text
|
||||||
|
route-dst=192.168.0.253
|
||||||
|
```
|
||||||
|
|
||||||
|
соединению ставится:
|
||||||
|
|
||||||
|
```text
|
||||||
|
connection-mark=via-awg
|
||||||
|
```
|
||||||
|
|
||||||
|
после чего SNAT:
|
||||||
|
|
||||||
|
```text
|
||||||
|
192.168.0.6
|
||||||
|
|
|
||||||
|
v
|
||||||
|
192.168.0.3
|
||||||
|
```
|
||||||
|
|
||||||
|
Ubuntu теперь видит:
|
||||||
|
|
||||||
|
```text
|
||||||
|
192.168.0.3 -> 149.154.167.99
|
||||||
|
```
|
||||||
|
|
||||||
|
и обратный пакет обязательно возвращается:
|
||||||
|
|
||||||
|
```text
|
||||||
|
AWG
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Ubuntu
|
||||||
|
|
|
||||||
|
v
|
||||||
|
MikroTik 192.168.0.3
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Windows 192.168.0.6
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 19. Проверка с клиента
|
||||||
|
|
||||||
|
Например Telegram:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
tracert 149.154.167.99
|
||||||
|
```
|
||||||
|
|
||||||
|
Должно быть примерно:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1 192.168.0.3
|
||||||
|
2 192.168.0.253
|
||||||
|
3 10.x.x.x
|
||||||
|
4 ...
|
||||||
|
```
|
||||||
|
|
||||||
|
TCP:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Test-NetConnection 149.154.167.99 -Port 443
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаем:
|
||||||
|
|
||||||
|
```text
|
||||||
|
TcpTestSucceeded : True
|
||||||
|
```
|
||||||
|
|
||||||
|
HTTPS:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
curl.exe -4 -v https://web.telegram.org/
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаем:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Connected to web.telegram.org
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 20. Проверка на Ubuntu
|
||||||
|
|
||||||
|
Посмотреть проходящий трафик:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tcpdump -ni ens18 'host 149.154.167.99 and tcp port 443'
|
||||||
|
```
|
||||||
|
|
||||||
|
При работающем SNAT источник должен быть:
|
||||||
|
|
||||||
|
```text
|
||||||
|
192.168.0.3.xxxxx > 149.154.167.99.443
|
||||||
|
```
|
||||||
|
|
||||||
|
А **не**:
|
||||||
|
|
||||||
|
```text
|
||||||
|
192.168.0.6.xxxxx > 149.154.167.99.443
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить AWG:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
awg show
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить внешний IP самого туннеля:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl --interface awg0 https://ipinfo.io/ip
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 21. Итоговая схема
|
||||||
|
|
||||||
|
```text
|
||||||
|
BGP peer
|
||||||
|
45.148.244.55 AS65444
|
||||||
|
|
|
||||||
|
| BGP prefixes
|
||||||
|
v
|
||||||
|
MikroTik RouterOS 6
|
||||||
|
77.79.185.98
|
||||||
|
AS64999
|
||||||
|
|
|
||||||
|
BGP input filter
|
||||||
|
set-in-nexthop=192.168.0.253
|
||||||
|
|
|
||||||
|
v
|
||||||
|
main routing table
|
||||||
|
|
||||||
|
149.154.160.0/20 -> 192.168.0.253
|
||||||
|
другие BGP сети -> 192.168.0.253
|
||||||
|
|
|
||||||
|
route-dst match
|
||||||
|
|
|
||||||
|
connection-mark
|
||||||
|
via-awg
|
||||||
|
|
|
||||||
|
SNAT source
|
||||||
|
-> 192.168.0.3
|
||||||
|
|
|
||||||
|
v
|
||||||
|
192.168.0.253
|
||||||
|
Ubuntu 24.04
|
||||||
|
|
|
||||||
|
policy routing
|
||||||
|
iif ens18 -> awg
|
||||||
|
|
|
||||||
|
v
|
||||||
|
awg0
|
||||||
|
|
|
||||||
|
v
|
||||||
|
AmneziaWG VPN
|
||||||
|
```
|
||||||
|
|
||||||
|
В результате BGP становится единственным источником списка сетей: новый префикс автоматически получает next-hop `192.168.0.253`, автоматически попадает через AWG и автоматически получает нужный SNAT на MikroTik.
|
||||||
Reference in New Issue
Block a user