Sign inSign up

snookerm/tun2socks-mikrotik

By snookerm

•Updated 22 days ago

ARP-safe tun2socks for RouterOS LXC. No iptables. github.com/snookerm/mikrotik-xray-balancer

Image
0

652

snookerm/tun2socks-mikrotik repository overview

⁠snookerm/tun2socks-mikrotik

Минимальный, ARP-safe tun2socks для контейнеров RouterOS / MikroTik LXC.

Образ построен поверх xjasonlyu/tun2socks⁠, но с собственным entrypoint, специально адаптированным для RouterOS LXC, где стандартный entrypoint ломает ARP-responder на VETH-интерфейсе и теряет UDP-пакеты от LAN-клиентов.

Главный проект и документация: https://github.com/snookerm/mikrotik-xray-balancer⁠

⁠Что особенного

В RouterOS 7.x контейнеры имеют ряд особенностей которые ломают upstream-tun2socks:

ОсобенностьЧто сломалось у xjasonlyu/tun2socksРешено в tun2socks-mikrotik
Часть /proc/sys/... read-onlyset -e + echo > rp_filter валит entrypointбез set -e, sysctl best-effort
Нет CAP_NET_ADMIN для iptablesiptables -t mangle -A MARK — silent no-opбез iptables, только iproute2
ip rule add not fwmark X table YЛомает ARP responder → router не достучится до контейнераip rule from $LAN_SUBNET iif $IFACE — узкий target
Alpine base дефолтит arp_ignore=1, arp_announce=2Strict-ARP → контейнер не отвечает на ARP → forwarded UDP packets droppedявный sysctl reset на 0

Без этого фикса: WhatsApp Desktop voice/video calls на Windows висели на «Соединение…» (на iOS/Android мобильный клиент сам делает обход — там работает и без UDP). Любой UDP STUN/RTP молча терялся.

⁠ENV-переменные

ENVDefaultЧто
TUNtun0имя TUN-устройства внутри контейнера
TUN_ADDR198.18.0.1/15IP TUN (служебный)
MTU1500MTU TUN
LOGLEVELinfoerror / warning / info / debug
PROXY(required)socks5://host:port или http://host:port
RT_TABLE555номер policy-routing таблицы
LOCAL_NETавтодетектподсеть контейнера
LAN_SUBNET192.168.15.0/24LAN-клиенты, чей forwarded трафик идёт в TUN
IFACEавтодетектимя physical-iface для ip rule

⁠Compatibility

  • RouterOS 7.x (тестировано на 7.21.3)
  • ARM64 (тестировано на hAP ax3)
  • Также работает в обычном Docker / Podman (как прозрачный SOCKS5 → TUN gateway)

⁠Лицензия

MIT — повторяет лицензию upstream xjasonlyu/tun2socks.


⁠English version

Minimal, ARP-safe tun2socks for RouterOS / MikroTik LXC containers.

The image is based on xjasonlyu/tun2socks⁠, but with a custom entrypoint specifically adapted for RouterOS LXC, where the upstream entrypoint breaks the ARP responder on the VETH interface and silently drops UDP packets from LAN clients.

Main project and docs: https://github.com/snookerm/mikrotik-xray-balancer⁠

⁠What's special

In RouterOS 7.x, containers have several quirks that break the upstream tun2socks:

QuirkBreaks in xjasonlyu/tun2socksFixed in tun2socks-mikrotik
Some /proc/sys/... is read-onlyset -e + echo > rp_filter aborts entrypointno set -e, sysctl best-effort
No CAP_NET_ADMIN for iptablesiptables -t mangle -A MARK — silent no-opno iptables, only iproute2
ip rule add not fwmark X table YBreaks ARP responder → router can't reach the containerip rule from $LAN_SUBNET iif $IFACE — narrow target
Alpine base defaults arp_ignore=1, arp_announce=2Strict ARP → container ignores ARP → forwarded UDP packets droppedexplicit sysctl reset to 0

Without this fix: WhatsApp Desktop voice/video calls on Windows hung on "Connecting…" (mobile WhatsApp on iOS/Android works without UDP because the mobile client does its own fallback). Any UDP STUN/RTP was silently dropped.

⁠ENV variables
ENVDefaultWhat
TUNtun0TUN device name inside container
TUN_ADDR198.18.0.1/15TUN IP (internal)
MTU1500TUN MTU
LOGLEVELinfoerror / warning / info / debug
PROXY(required)socks5://host:port or http://host:port
RT_TABLE555policy-routing table number
LOCAL_NETautocontainer subnet
LAN_SUBNET192.168.15.0/24LAN clients whose forwarded traffic goes into TUN
IFACEautophysical iface name for ip rule
⁠Compatibility
  • RouterOS 7.x (tested on 7.21.3)
  • ARM64 (tested on hAP ax3)
  • Also works in plain Docker / Podman (as a transparent SOCKS5 → TUN gateway)
⁠License

MIT — same as the upstream xjasonlyu/tun2socks.

Tag summary

Content type

Image

Digest

sha256:5d6b9266b…

Size

10.1 MB

Last updated

22 days ago

docker pull snookerm/tun2socks-mikrotik