UDPEQ
udpeq is a program that balances UDP traffic over parallel routes. This is useful if you want to connect two endpoints through several slow or unreliable channels. For example, if you have 3 modem lines and a one-way satellite link, you might want to bond all of these together to form a faster, more reliable "virtual" connection. You will need to run udpeq on the local and the remote computer.
udpeq by itself just shuttles UDP packets between two endpoints. You will almost certainly want to use a higher-level tunnel on top of udpeq to provide a "real" IP connection. CIPE or OPENVPN is perfect for this.
Existing solutions of this nature (for example, multi-link ppp) tend to make simplistic assumptions about the bandwidth and availability of the channels. udpeq attempts to dynamically adjust to changing conditions, being as robust as possible while still being able to maximize throughput.
Run udpeq with no arguments for a summary of usage. To establish the udpeq link between two machines, you might do something like this :
on machine A :
udpeq -LI :11901 -LO :11902 -RIO :8000 -RIO :8001 -RIO :8002
on machine B :
udpeq -LI :11903 -LO :11904 -ROI 10.10.69.1:8000 -ROI 10.20.69.1:8001 -ROI 10.30.69.1:8002
Here machine A listens for machine B to establish 3 connections (to UDP ports 8000, 8001, and 8002).
To specify a local address to which a socket should bind, you can append two other colon seperated fields to the destination address (:LOCALADDRESS:LOCALPORT) So, "-ROI 10.10.69.1:8000:10.10.69.2:9000" means the socket should be bound to local address "10.10.69.2" and local port 9000 before connecting to 10.10.69.1 port 8000.
Machine A would use these lines in the cipe options file :
me 127.0.0.1:11902 peer 127.0.0.1:11901
and machine B would do similarly (using ports 11904 and 11903).
You would use firewall rules, udprelay, or other nefarious means to create the individual routes (packets sent to 10.X.69.1 should all end up at machine A), with different Xs presumably corresponding to different network routes.
On Linux 2.4, connection tracking (needed for NAT) is buggy and will preserve the SNAT of an old local address, even after it's interface has gone down and come back up with a new address. So if you have multiple interfaces with dynamic IP addresses, and you are using iptables to fwmark packets and route them differently depending on destination port, you must explicity specify to udpeq the local address to which each channel must bind (using the [:LOCALADDRESS:LOCALPORT] syntax). Since udpeq only takes it's input once from the command line, you will need to re-invoke udpeq every time your dynamic IP address changes.
You can use the -SECRET option to specify a file containing random data. This data will be xored with packet contents for the purpose of obscurity. The same file must be present at both endpoints. Dont count on this for security, it's just a layer of obscurity. On top of udpeq, you should run cipe or openvpn.
If you have any comments or questions about udpeq, please feel free to contact the author at truxton@truxton.com
see also :
cipe
openvpn
udprelay
