Raspberry Pi 4 должен стать VPN-шлюзом для домашней сети. Логика маршрутизации: весь трафик → VPN (AmneziaWG), RU-подсети → провайдер напрямую.
Устройства в сети получают RPi как шлюз по умолчанию через DHCP на Keenetic.
Интернет
↓
Keenetic (192.168.1.1, PPPoE → провайдер Small Telecom)
↓ (eth0)
RPi4 (IP уточнить у пользователя)
↓
Устройства в LAN (шлюз = IP RPi)
| Переменная | Значение |
|---|---|
KEENETIC_GW |
192.168.1.1 |
VPN_SERVER_IP |
<VPN_SERVER_IP> |
VPN_IFACE |
awg0 |
RPI_LAN_IP |
уточнить у пользователя |
LAN_SUBNET |
192.168.1.0/24 (уточнить) |
# Проверить есть ли уже
which awg || which wg
# Если нет — установить
sudo apt update
sudo apt install -y wireguard-tools
# AmneziaWG: собрать из исходников или установить deb если естьПользователь предоставит конфиг для AmneziaWG отдельно.
Сохранить конфиг в /etc/amnezia/amneziawg/awg0.conf.
Поднять интерфейс: sudo awg-quick up awg0.
# Временно
sudo sysctl -w net.ipv4.ip_forward=1
# Постоянно
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -pСкрипт должен выполнять следующее при каждом запуске:
-
Скачать список RU-подсетей:
https://russia.iplist.opencck.org/?format=text&data=cidr4 -
Сбросить текущие маршруты (кроме локальных и маршрута до VPN-сервера).
-
Установить дефолтный маршрут через VPN:
ip route add default dev awg0
-
Добавить маршрут до VPN-сервера через провайдера (критично — иначе петля):
ip route add <VPN_SERVER_IP>/32 via 192.168.1.1
-
Добавить маршруты для RU-подсетей через провайдера:
# для каждой подсети из списка: ip route add <CIDR> via 192.168.1.1
-
Добавить маршрут для локальной сети:
ip route add 192.168.1.0/24 dev eth0
Скрипт сделать идемпотентным — повторный запуск не должен падать с ошибкой.
RPi должен делать NAT для устройств в LAN:
sudo iptables -t nat -A POSTROUTING -o awg0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEСохранить правила iptables чтобы выживали после перезагрузки:
sudo apt install -y iptables-persistent
sudo netfilter-persistent saveСоздать systemd-сервис /etc/systemd/system/vpn-routing.service:
[Unit]
Description=VPN Routing Setup
After=network-online.target awg-quick@awg0.service
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/etc/routing.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetsudo systemctl enable vpn-routing
sudo systemctl start vpn-routingСоздать systemd-сервис для awg0 если не создан автоматически при установке:
sudo systemctl enable awg-quick@awg0
sudo systemctl start awg-quick@awg0Порядок запуска при загрузке системы:
awg-quick@awg0— поднимает VPN-интерфейсvpn-routing— применяет маршруты (зависит от awg0)
Список RU-подсетей обновляется — добавить cron для ежедневного обновления:
# создать файл /etc/cron.daily/update-vpn-routes
#!/bin/bash
/etc/routing.sh >> /var/log/vpn-routing.log 2>&1sudo chmod +x /etc/cron.daily/update-vpn-routesСкрипт должен полностью вернуть RPi в состояние обычного хоста без какой-либо маршрутизации.
Скрипт выполняет:
- Остановить и выключить из автозапуска сервисы:
sudo systemctl stop vpn-routing
sudo systemctl disable vpn-routing
sudo systemctl stop awg-quick@awg0
sudo systemctl disable awg-quick@awg0- Опустить VPN-интерфейс:
sudo awg-quick down awg0- Сбросить все маршруты и восстановить дефолтный через Keenetic:
ip route flush table main
ip route add default via 192.168.1.1
ip route add 192.168.1.0/24 dev eth0- Удалить правила NAT:
sudo iptables -t nat -F POSTROUTING
sudo netfilter-persistent save- Удалить cron:
sudo rm -f /etc/cron.daily/update-vpn-routes- Вывести сообщение:
Rollback complete. RPi is now a regular host.
Default gateway: 192.168.1.1
Remember to update DHCP gateway on Keenetic back to 192.168.1.1.
Скрипт НЕ удаляет:
- Конфиг awg0.conf (оставить для повторного запуска)
- Установленные пакеты
- Сам скрипт routing.sh
# 1. Дефолтный маршрут — должен идти через awg0
ip route show default
# 2. Маршрут до VPN-сервера — должен идти через 192.168.1.1
ip route get <VPN_SERVER_IP>
# 3. Маршрут до RU-ресурса (например Яндекс) — должен идти через eth0/192.168.1.1
ip route get 77.88.8.8
# 4. Маршрут до зарубежного ресурса — должен идти через awg0
ip route get 8.8.8.8
# 5. Проверить что трафик реально идёт через VPN
curl --interface awg0 https://ifconfig.me- Конфигурацию Keenetic — только DHCP настройка шлюза (отдельно, вручную пользователем)
- OpenVPN (tun0) — существующий корпоративный туннель Promwad не трогать
- Docker-контейнеры если есть
Выполнять после того как RPi полностью настроен и проверен.
- Открыть веб-интерфейс Keenetic: http://192.168.1.1
- Левое меню → Мои сети и Wi-Fi → вкладка Default
- Прокрутить до раздела Параметры IP
- Нажать Скрыть настройки DHCP (разворачивает поля)
- Найти поле Адрес шлюза (сейчас пустое)
- Вписать IP RPi (например
192.168.1.XX) - Нажать Сохранить
После сохранения все устройства при следующем обновлении DHCP-аренды получат RPi как шлюз. Для мгновенного применения — переподключить Wi-Fi или сделать ipconfig /release && ipconfig /renew на Windows.
Откат: то же самое, но поле "Адрес шлюза" очистить → Сохранить.
sudo systemctl status vpn-routing
sudo systemctl status awg-quick@awg0
sudo awg show
ip route show default
curl https://ifconfig.me # должен вернуть IP VPN-сервераsudo systemctl stop vpn-routing
sudo systemctl stop awg-quick@awg0
sudo ip route flush table main
sudo ip route add default via 192.168.1.1
sudo ip route add 192.168.1.0/24 dev eth0Трафик пойдёт напрямую через Keenetic.
sudo systemctl start awg-quick@awg0
sudo systemctl start vpn-routingsudo /etc/routing.shСимптом: интернет не работает, awg show показывает handshake > 3 минут.
sudo systemctl restart awg-quick@awg0
sudo systemctl restart vpn-routingsudo /etc/vpn-rollback.shПосле этого вернуть DHCP на Keenetic: шлюз = 192.168.1.1.
sudo journalctl -u vpn-routing -n 50
sudo journalctl -u awg-quick@awg0 -n 50
tail -50 /var/log/vpn-routing.log| Файл | Назначение |
|---|---|
/etc/amnezia/amneziawg/awg0.conf |
Конфиг VPN-туннеля |
/etc/routing.sh |
Маршрутизация (запуск при старте + cron) |
/etc/vpn-rollback.sh |
Полный откат |
/etc/systemd/system/vpn-routing.service |
Systemd-сервис |
/etc/cron.daily/update-vpn-routes |
Ежедневное обновление подсетей |
/var/log/vpn-routing.log |
Лог обновлений |
Пользователь предоставит отдельно в процессе выполнения задачи.