Skip to content

Instantly share code, notes, and snippets.

@grepto
Last active March 9, 2026 18:05
Show Gist options
  • Select an option

  • Save grepto/b846aa1ed215fe956be2599bb326d1f0 to your computer and use it in GitHub Desktop.

Select an option

Save grepto/b846aa1ed215fe956be2599bb326d1f0 to your computer and use it in GitHub Desktop.
Выкидываем из туннелирование входящий трафик, при использовании VPN на сервере

NetBird: входящий трафик не через VPN

Проблема

NetBird (wt0) перехватывает ответы на входящие соединения через enp2s0. Правило 110 направляет весь трафик без метки NetBird через VPN.

Деплой

Предусловие: NetBird запущен, таблица via_lan существует. Проверить: ip route show table via_lan → должно быть default via 192.168.11.1 dev enp2s0 Если нет: sudo ip route add default via 192.168.11.1 dev enp2s0 table via_lan

Деплой: sudo cp policy-routing.sh /etc/network/policy-routing.sh sudo chmod +x /etc/network/policy-routing.sh sudo cp policy-routing.service /etc/systemd/system/policy-routing.service sudo systemctl daemon-reload sudo systemctl enable --now policy-routing.service

Проверка: ip rule show sudo iptables -t mangle -L PREROUTING -n -v curl -s https://ifconfig.me

[Unit]
Description=Policy-based routing for inbound 80/443 via real gateway
After=network-online.target netbird.service
Wants=network-online.target
BindsTo=netbird.service
[Service]
Type=oneshot
ExecStart=/etc/network/policy-routing.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
#!/bin/bash
# Policy-based routing: ответы Docker-контейнеров через реальный шлюз (enp2s0)
# Решает проблему асимметричной маршрутизации с netbird exit-node
# Механизм: ip rule from 172.18.0.0/16 (сеть proxy) → via_lan
IFACE="enp2s0"
# Убираем старые iptables правила CONNMARK (если остались с предыдущих версий)
iptables -t mangle -D PREROUTING -i "$IFACE" -p tcp -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -j CONNMARK --set-mark 0x64 2>/dev/null || true
iptables -t mangle -D PREROUTING \
-m connmark --mark 0x64 -m conntrack --ctstate ESTABLISHED,RELATED \
-j CONNMARK --restore-mark 2>/dev/null || true
# Убираем устаревший fwmark-rule
ip rule del fwmark 0x64 table via_lan priority 100 2>/dev/null || true
# ip rule: Docker proxy-сеть (172.18.0.0/16) → via_lan
# Ответы контейнеров идут через реальный шлюз, не через NetBird
ip rule del from 172.18.0.0/16 table via_lan priority 95 2>/dev/null || true
ip rule add from 172.18.0.0/16 table via_lan priority 95
echo "policy-routing: правила применены"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment