ARP-safe tun2socks for RouterOS LXC. No iptables. github.com/snookerm/mikrotik-xray-balancer
652
Минимальный, 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-only | set -e + echo > rp_filter валит entrypoint | без set -e, sysctl best-effort |
Нет CAP_NET_ADMIN для iptables | iptables -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=2 | Strict-ARP → контейнер не отвечает на ARP → forwarded UDP packets dropped | явный sysctl reset на 0 |
Без этого фикса: WhatsApp Desktop voice/video calls на Windows висели на «Соединение…» (на iOS/Android мобильный клиент сам делает обход — там работает и без UDP). Любой UDP STUN/RTP молча терялся.
| ENV | Default | Что |
|---|---|---|
TUN | tun0 | имя TUN-устройства внутри контейнера |
TUN_ADDR | 198.18.0.1/15 | IP TUN (служебный) |
MTU | 1500 | MTU TUN |
LOGLEVEL | info | error / warning / info / debug |
PROXY | (required) | socks5://host:port или http://host:port |
RT_TABLE | 555 | номер policy-routing таблицы |
LOCAL_NET | автодетект | подсеть контейнера |
LAN_SUBNET | 192.168.15.0/24 | LAN-клиенты, чей forwarded трафик идёт в TUN |
IFACE | автодетект | имя physical-iface для ip rule |
MIT — повторяет лицензию upstream xjasonlyu/tun2socks.
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
In RouterOS 7.x, containers have several quirks that break the upstream tun2socks:
| Quirk | Breaks in xjasonlyu/tun2socks | Fixed in tun2socks-mikrotik |
|---|---|---|
Some /proc/sys/... is read-only | set -e + echo > rp_filter aborts entrypoint | no set -e, sysctl best-effort |
No CAP_NET_ADMIN for iptables | iptables -t mangle -A MARK — silent no-op | no iptables, only iproute2 |
ip rule add not fwmark X table Y | Breaks ARP responder → router can't reach the container | ip rule from $LAN_SUBNET iif $IFACE — narrow target |
Alpine base defaults arp_ignore=1, arp_announce=2 | Strict ARP → container ignores ARP → forwarded UDP packets dropped | explicit 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 | Default | What |
|---|---|---|
TUN | tun0 | TUN device name inside container |
TUN_ADDR | 198.18.0.1/15 | TUN IP (internal) |
MTU | 1500 | TUN MTU |
LOGLEVEL | info | error / warning / info / debug |
PROXY | (required) | socks5://host:port or http://host:port |
RT_TABLE | 555 | policy-routing table number |
LOCAL_NET | auto | container subnet |
LAN_SUBNET | 192.168.15.0/24 | LAN clients whose forwarded traffic goes into TUN |
IFACE | auto | physical iface name for ip rule |
MIT — same as the upstream xjasonlyu/tun2socks.
Content type
Image
Digest
sha256:5d6b9266b…
Size
10.1 MB
Last updated
22 days ago
docker pull snookerm/tun2socks-mikrotik