📝 Описание проблемы
После обновления до Podkop 0.7.19 TCP Port Forwarding всё ещё не работает, если используется Fully Routed IPs.
У меня в Fully Routed IPs указана вся LAN-подсеть:
При этом настроен обычный проброс порта через LuCI:
WAN TCP 443 -> 192.168.1.10:443
Если Podkop выключить — порт снаружи открывается.
Если Podkop включить — порт снаружи не открывается.
В PodkopTable mangle правило ct status dnat return есть, но оно стоит ниже правил для Fully Routed IPs:
iifname @interfaces ip saddr 192.168.1.0/24 meta l4proto udp meta mark set 0x00100000 counter
iifname @interfaces ip saddr 192.168.1.0/24 meta l4proto tcp meta mark set 0x00100000 counter
ct status dnat return
Похоже, из-за этого DNAT-трафик сначала получает mark 0x00100000, и только потом доходит до ct status dnat return.
Для проверки я временно вставлял такое правило самым верхним:
nft insert rule inet PodkopTable mangle ct status dnat counter return comment "DEBUG_DNAT_RETURN_TOP"
После этого port forwarding сразу начинал работать.
Шаги для воспроизведения
- Включить Podkop.
- В
Fully Routed IPs указать LAN-подсеть:
- Настроить TCP Port Forwarding через LuCI:
WAN TCP 443 -> 192.168.1.10:443
- Проверить доступ к порту снаружи.
- Выключить Podkop.
- Проверить этот же порт ещё раз.
✅ Ожидаемое поведение
TCP Port Forwarding должен работать при включённом Podkop, даже если используется Fully Routed IPs.
DNAT/port-forwarded соединения не должны маркироваться в VPN/tproxy.
🖥️ Информация о системе
OpenWrt: 25.12.4 r32933-4ccb782af7
Target: mediatek/filogic
Device: Xiaomi Mi Router AX3000T
Board: xiaomi,mi-router-ax3000t
Kernel: 6.12.87
Architecture: aarch64_cortex-a53
podkop: 0.7.19-r1
luci-app-podkop: 0.7.19-r1
luci-i18n-podkop-ru: 0.260601.34183
sing-box: 1.12.17-r1
firewall4: 2025.03.17~b6e51575-r2
nftables-json: 1.1.6-r1
dnsmasq: 2.91-r3
⚙️ Конфигурация
Podkop config
podkop.settings.dns_type='udp'
podkop.settings.dns_server='77.88.8.8'
podkop.settings.bootstrap_dns_server='77.88.8.8'
podkop.settings.dns_rewrite_ttl='60'
podkop.settings.source_network_interfaces='br-lan'
podkop.settings.enable_output_network_interface='0'
podkop.settings.enable_badwan_interface_monitoring='0'
podkop.settings.enable_yacd='0'
podkop.settings.disable_quic='0'
podkop.settings.update_interval='1d'
podkop.settings.download_lists_via_proxy='0'
podkop.settings.dont_touch_dhcp='0'
podkop.settings.config_path='/etc/sing-box/config.json'
podkop.settings.cache_path='/tmp/sing-box/cache.db'
podkop.settings.log_level='warn'
podkop.settings.exclude_ntp='0'
podkop.settings.shutdown_correctly='0'
podkop.main.connection_type='proxy'
podkop.main.proxy_config_type='url'
podkop.main.enable_udp_over_tcp='0'
podkop.main.proxy_string='<REDACTED>'
podkop.main.user_domain_list_type='disabled'
podkop.main.user_subnet_list_type='disabled'
podkop.main.mixed_proxy_enabled='0'
podkop.main.resolve_real_ip_for_routing='0'
podkop.main.fully_routed_ips='192.168.1.0/24'
Firewall redirect
firewall.@redirect[0]=redirect
firewall.@redirect[0].dest='lan'
firewall.@redirect[0].target='DNAT'
firewall.@redirect[0].name='SWAG HTTPS'
firewall.@redirect[0].proto='tcp'
firewall.@redirect[0].src='wan'
firewall.@redirect[0].src_dport='443'
firewall.@redirect[0].dest_ip='192.168.1.10'
firewall.@redirect[0].dest_port='443'
nft -a list chain inet PodkopTable mangle
table inet PodkopTable {
chain mangle {
type filter hook prerouting priority mangle; policy accept;
ip saddr 192.168.1.0/24 ip daddr @localv4 return # handle 22
iifname @interfaces ip saddr 192.168.1.0/24 meta l4proto udp meta mark set 0x00100000 counter packets 68 bytes 12861 # handle 21
iifname @interfaces ip saddr 192.168.1.0/24 meta l4proto tcp meta mark set 0x00100000 counter packets 423 bytes 168708 # handle 20
ct status dnat return # handle 7
iifname @interfaces ip daddr @podkop_subnets meta l4proto tcp meta mark set 0x00100000 counter packets 0 bytes 0 # handle 8
iifname @interfaces ip daddr @podkop_subnets meta l4proto udp meta mark set 0x00100000 counter packets 0 bytes 0 # handle 9
iifname @interfaces ip daddr 198.18.0.0/15 meta l4proto tcp meta mark set 0x00100000 counter packets 0 bytes 0 # handle 10
iifname @interfaces ip daddr 198.18.0.0/15 meta l4proto udp meta mark set 0x00100000 counter packets 0 bytes 0 # handle 11
}
}
Проверка с временным правилом
Временно вставлял правило выше всех остальных:
nft insert rule inet PodkopTable mangle ct status dnat counter return comment "DEBUG_DNAT_RETURN_TOP"
После этого TCP Port Forwarding сразу начинал работать.
Это временное правило удалено из вывода выше.
📝 Описание проблемы
После обновления до Podkop
0.7.19TCP Port Forwarding всё ещё не работает, если используетсяFully Routed IPs.У меня в
Fully Routed IPsуказана вся LAN-подсеть:При этом настроен обычный проброс порта через LuCI:
Если Podkop выключить — порт снаружи открывается.
Если Podkop включить — порт снаружи не открывается.
В
PodkopTable mangleправилоct status dnat returnесть, но оно стоит ниже правил для Fully Routed IPs:Похоже, из-за этого DNAT-трафик сначала получает mark
0x00100000, и только потом доходит доct status dnat return.Для проверки я временно вставлял такое правило самым верхним:
После этого port forwarding сразу начинал работать.
Шаги для воспроизведения
Fully Routed IPsуказать LAN-подсеть:✅ Ожидаемое поведение
TCP Port Forwarding должен работать при включённом Podkop, даже если используется
Fully Routed IPs.DNAT/port-forwarded соединения не должны маркироваться в VPN/tproxy.
🖥️ Информация о системе
OpenWrt: 25.12.4 r32933-4ccb782af7 Target: mediatek/filogic Device: Xiaomi Mi Router AX3000T Board: xiaomi,mi-router-ax3000t Kernel: 6.12.87 Architecture: aarch64_cortex-a53 podkop: 0.7.19-r1 luci-app-podkop: 0.7.19-r1 luci-i18n-podkop-ru: 0.260601.34183 sing-box: 1.12.17-r1 firewall4: 2025.03.17~b6e51575-r2 nftables-json: 1.1.6-r1 dnsmasq: 2.91-r3⚙️ Конфигурация
Podkop config
Firewall redirect
nft -a list chain inet PodkopTable mangleПроверка с временным правилом
Временно вставлял правило выше всех остальных:
После этого TCP Port Forwarding сразу начинал работать.
Это временное правило удалено из вывода выше.