TProxy Controller
A Haskell service that manages Linux transparent proxy routing. It configures TPROXY rules, selects proxy servers, and coordinates network tools such as udp2raw and udpspeeder to route UDP traffic in a lossy environment camouflaged as TCP or ICMP.
Setup
The setup assumes you already have a proxy that accepts connections using TPROXY and can route everything through UDP. The setup has udp2raw connect to the internet over ICMP or a TCP port like 443, which then optionally connects to udpspeeder, which then connects to a proxy like xray (which can run over http 3).
Your configuration should be written in a config.yaml and you should start the controller with it as the argument like ./tproxy-controller servers.yaml. It doesn’t need root, but needs CAP_NET_ADMIN capability as it runs iptables. But it is designed to be installed as a service and run as another user to cleanly separate the packets.
You install the tproxy controller as a service and then use ./control.sh stop to delete the iptables rules and ./control.sh start to apply them again for the default server. You can switch servers with ./control.sh start [server]
The udp2raw and udpspeeder configs should be generated based on the current server in /run/tproxy/.env which the services read from for their own configuration. You should then automatically restart udp2raw and udpspeeder on config change.