[{"content":"Проброс портов через WireGuard вручную требует целой цепочки команд файрвола. tun-nat заменяет их одним файлом конфигурации поверх nftables.\nШаг 1. Установка Требование: инструмент работает только с nftables. Проверка: nft --version; если команда не найдена - sudo apt install nftables.\nsudo git clone https://github.com/lashkinse/tun-nat.git /etc/tun-nat Нет git? Сначала: sudo apt install git.\nШаг 2. Конфигурация Откройте /etc/tun-nat/config.toml и приведите к виду:\n[tunnel] interface = \u0026#34;wg0\u0026#34; # туннельный интерфейс (WireGuard) port = 51820 # порт WireGuard [external] interface = \u0026#34;eth0\u0026#34; # внешний интерфейс сервера ip = \u0026#34;\u0026#34; # пусто = автоматический режим (MASQUERADE) # Игровой сервер: 27015 tcp + udp на 10.0.0.2 [[port_rules]] protocol = \u0026#34;tcp\u0026#34; target = \u0026#34;10.0.0.2\u0026#34; ports = \u0026#34;27015\u0026#34; [[port_rules]] protocol = \u0026#34;udp\u0026#34; target = \u0026#34;10.0.0.2\u0026#34; ports = \u0026#34;27015\u0026#34; # Веб-сервис: 8080 на 10.0.0.3 [[port_rules]] protocol = \u0026#34;tcp\u0026#34; target = \u0026#34;10.0.0.3\u0026#34; ports = \u0026#34;8080\u0026#34; Новое правило - копия блока [[port_rules]] со своими значениями:\nprotocol - tcp или udp; target - IP устройства внутри туннеля; ports - порт (27015) или диапазон (27015-27050). Шаг 3. Автозапуск с туннелем Добавьте две строки в секцию [Interface] файла /etc/wireguard/wg0.conf:\n[Interface] # ...ваши текущие настройки... PostUp = /etc/tun-nat/apply-nat.sh # применить правила при старте PreDown = /etc/tun-nat/apply-nat.sh --down # убрать при остановке Используйте именно PreDown, а не PostDown: к моменту PostDown интерфейс уже удалён, и скрипт не сможет его найти для очистки.\nПерезапустите туннель:\nsudo wg-quick down wg0 \u0026amp;\u0026amp; sudo wg-quick up wg0 Готово: трафик на указанные порты сервера уходит на устройства внутри туннеля.\n🔗 Исходный код и документация: github.com/lashkinse/tun-nat\n","permalink":"https://lashkin.ru/posts/tun-nat/","summary":"\u003cp\u003eПроброс портов через WireGuard вручную требует целой цепочки команд файрвола. \u003cstrong\u003e\u003ca href=\"https://github.com/lashkinse/tun-nat\"\u003etun-nat\u003c/a\u003e\u003c/strong\u003e заменяет их одним файлом конфигурации поверх nftables.\u003c/p\u003e\n\u003ch3 id=\"шаг-1-установка\"\u003eШаг 1. Установка\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eТребование:\u003c/strong\u003e инструмент работает только с \u003ccode\u003enftables\u003c/code\u003e. Проверка: \u003ccode\u003enft --version\u003c/code\u003e; если команда не найдена - \u003ccode\u003esudo apt install nftables\u003c/code\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo git clone https://github.com/lashkinse/tun-nat.git /etc/tun-nat\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eНет \u003ccode\u003egit\u003c/code\u003e? Сначала: \u003ccode\u003esudo apt install git\u003c/code\u003e.\u003c/p\u003e\n\u003ch3 id=\"шаг-2-конфигурация\"\u003eШаг 2. Конфигурация\u003c/h3\u003e\n\u003cp\u003eОткройте \u003ccode\u003e/etc/tun-nat/config.toml\u003c/code\u003e и приведите к виду:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-toml\" data-lang=\"toml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[\u003cspan style=\"color:#a6e22e\"\u003etunnel\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003einterface\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;wg0\u0026#34;\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e# туннельный интерфейс (WireGuard)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eport\u003c/span\u003e = \u003cspan style=\"color:#ae81ff\"\u003e51820\u003c/span\u003e          \u003cspan style=\"color:#75715e\"\u003e# порт WireGuard\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[\u003cspan style=\"color:#a6e22e\"\u003eexternal\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003einterface\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;eth0\u0026#34;\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e# внешний интерфейс сервера\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eip\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e               \u003cspan style=\"color:#75715e\"\u003e# пусто = автоматический режим (MASQUERADE)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Игровой сервер: 27015 tcp + udp на 10.0.0.2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[[\u003cspan style=\"color:#a6e22e\"\u003eport_rules\u003c/span\u003e]]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eprotocol\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;tcp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003etarget\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;10.0.0.2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eports\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;27015\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[[\u003cspan style=\"color:#a6e22e\"\u003eport_rules\u003c/span\u003e]]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eprotocol\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;udp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003etarget\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;10.0.0.2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eports\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;27015\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Веб-сервис: 8080 на 10.0.0.3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[[\u003cspan style=\"color:#a6e22e\"\u003eport_rules\u003c/span\u003e]]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eprotocol\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;tcp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003etarget\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;10.0.0.3\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eports\u003c/span\u003e = \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;8080\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eНовое правило - копия блока \u003ccode\u003e[[port_rules]]\u003c/code\u003e со своими значениями:\u003c/p\u003e","title":"Проброс портов через WireGuard за 3 шага с tun-nat"},{"content":"Привет! Я Сергей Лашкин - Backend, DevOps и Reverse Engineer.\nСоздаю комплексные решения для игровых проектов: от развертывания серверной инфраструктуры до разработки веб-платформ, магазинов и интеграций с внешними сервисами.\nКонтакты ✈️ Telegram: @lashkinse (основной) 💻 GitHub: github.com/lashkinse 📧 Email: lashkinse+job + @ + ya.ru Стек Языки: C++, C#, Python, Bash Backend \u0026amp; Web: REST API, Базы данных, Веб-платформы Инфраструктура: Linux, Windows, Docker, CI/CD Фокус: Game servers, Web platforms, API \u0026amp; Integrations, Reverse engineering ","permalink":"https://lashkin.ru/about/","summary":"\u003cp\u003eПривет! Я \u003cstrong\u003eСергей Лашкин\u003c/strong\u003e - Backend, DevOps и Reverse Engineer.\u003c/p\u003e\n\u003cp\u003eСоздаю комплексные решения для игровых проектов: от развертывания серверной инфраструктуры до разработки веб-платформ, магазинов и интеграций с внешними сервисами.\u003c/p\u003e\n\u003ch3 id=\"контакты\"\u003eКонтакты\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✈️ \u003cstrong\u003eTelegram:\u003c/strong\u003e \u003ca href=\"https://t.me/lashkinse\"\u003e@lashkinse\u003c/a\u003e \u003cem\u003e(основной)\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e💻 \u003cstrong\u003eGitHub:\u003c/strong\u003e \u003ca href=\"https://github.com/lashkinse\"\u003egithub.com/lashkinse\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📧 \u003cstrong\u003eEmail:\u003c/strong\u003e \u003ccode\u003elashkinse+job\u003c/code\u003e + \u003ccode\u003e@\u003c/code\u003e + \u003ccode\u003eya.ru\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"стек\"\u003eСтек\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eЯзыки:\u003c/strong\u003e C++, C#, Python, Bash\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBackend \u0026amp; Web:\u003c/strong\u003e REST API, Базы данных, Веб-платформы\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eИнфраструктура:\u003c/strong\u003e Linux, Windows, Docker, CI/CD\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eФокус:\u003c/strong\u003e Game servers, Web platforms, API \u0026amp; Integrations, Reverse engineering\u003c/li\u003e\n\u003c/ul\u003e","title":"Обо мне"}]