Проброс портов через WireGuard вручную требует целой цепочки команд файрвола. tun-nat заменяет их одним файлом конфигурации поверх nftables.

Шаг 1. Установка

Требование: инструмент работает только с nftables. Проверка: nft --version; если команда не найдена - sudo apt install nftables.

sudo git clone https://github.com/lashkinse/tun-nat.git /etc/tun-nat

Нет git? Сначала: sudo apt install git.

Шаг 2. Конфигурация

Откройте /etc/tun-nat/config.toml и приведите к виду:

[tunnel]
interface = "wg0"     # туннельный интерфейс (WireGuard)
port = 51820          # порт WireGuard

[external]
interface = "eth0"    # внешний интерфейс сервера
ip = ""               # пусто = автоматический режим (MASQUERADE)

# Игровой сервер: 27015 tcp + udp на 10.0.0.2
[[port_rules]]
protocol = "tcp"
target = "10.0.0.2"
ports = "27015"

[[port_rules]]
protocol = "udp"
target = "10.0.0.2"
ports = "27015"

# Веб-сервис: 8080 на 10.0.0.3
[[port_rules]]
protocol = "tcp"
target = "10.0.0.3"
ports = "8080"

Новое правило - копия блока [[port_rules]] со своими значениями:

  • protocol - tcp или udp;
  • target - IP устройства внутри туннеля;
  • ports - порт (27015) или диапазон (27015-27050).

Шаг 3. Автозапуск с туннелем

Добавьте две строки в секцию [Interface] файла /etc/wireguard/wg0.conf:

[Interface]
# ...ваши текущие настройки...

PostUp = /etc/tun-nat/apply-nat.sh          # применить правила при старте
PreDown = /etc/tun-nat/apply-nat.sh --down  # убрать при остановке

Используйте именно PreDown, а не PostDown: к моменту PostDown интерфейс уже удалён, и скрипт не сможет его найти для очистки.

Перезапустите туннель:

sudo wg-quick down wg0 && sudo wg-quick up wg0

Готово: трафик на указанные порты сервера уходит на устройства внутри туннеля.

🔗 Исходный код и документация: github.com/lashkinse/tun-nat