Echolink Proxy/Relay server - PE1CHL This Echolink Proxy/Relay server can run multiple echolink proxies and/or relays on a single machine, provided it has multiple IPv4 addresses on the internet. It is written in C and uses a single socket for the well-known ports for all proxies and relays, reducing the number of sockets and fds. The configuration file is very similar to the configuration of the original Java proxy, except the definition of the addresses. You need to set the number of proxies that are running on this machine, 1 when you have only a single public IP address, and the domain name or address for every instance. Every proxy instance has to have a different public IP address! Example for a single proxy: # Set the number of proxies you want to run NumberOfProxies=1 # Set the address for each of the proxies defined in NumberOfProxies above. # This is the public address on which this proxy instance will be running. # In this version there is no separate inside, outside and registration # address, they are all the same. But multiple proxies will have to use # different addresses, all defined in the operating system of this machine. # Proxies are numbered from 0 up to NumberOfProxies-1, but holes in the # list can be created by omitting the proxy with that number. Proxy_0=your.domain.name For two proxy servers you would set NumberOfProxies=2 and define values for Proxy_0 and Proxy_1 When you want to run 10 proxies numbered 30..39 (e.g. because you run proxies numbered up to 29 on another machine and you want to register them all using similar names on the echolink proxy list), set NumberOfProxies=40 and define the values for Proxy_30 up to Proxy_39. Note that every proxy should have a unique registration name. When you run multiple proxies, define the RegistrationName like this: RegistrationName=yourcall #%02d This will generate names with 2-digit decimal numbers set to the proxy number. %d will generate numbers with the smallest possible number of digits. It is just a standard printf format. It is also possible to override the RegistrationName, RegistrationComment or PublicAddress (registration address) for a single proxy by defining a RegistrationName_nn, RegistrationComment_nn or PublicAddress_nn with nn the same as the Proxy_nn number. This will override the global RegistrationName RegistrationComment or Proxy address. There is a similar configuration for relays. To setup relays, define NumberOfRelays and Relay_nn each with different IP addresses. Note that without cooperation from the echolink people, it is not possible to run a relay that is actually used by the typical end-user. When you want to contribute some relays to the community, contact EchoLink via their website and ask about adding the relay addresses to their DNS for your region. To do local testing you can override the address for relay.echolink.org in your local DNS service, that is what the app uses to find the addresses of relays. Unlike in earlier versions, there no longer is a need to tweak the TCP queue length and/or set the TCPQueueHighWater parameter. It is no longer required for proper operation. You can still add this to the /etc/sysctl.conf: ################################################################### ## increase Linux TCP buffer limits net.core.rmem_max = 1048576 net.core.wmem_max = 1048576 net.core.rmem_default = 262144 net.core.wmem_default = 262144 # increase Linux autotuning TCP buffer limits net.ipv4.tcp_rmem = 4096 262144 1048576 net.ipv4.tcp_wmem = 4096 262144 1048576 net.ipv4.tcp_mem = 1048576 1048576 1048576 ################################################################### This will be loaded at reboot and can be forced once using "sysctl -f". Before building the program, you need to install the "nettle" library and its development package. E.g. on debian do "apt-get install nettle-dev". Then just type "make" to compile it using gcc, and move the binary to some place you like. To start the service, just run the program with 1 parameter: the name of the configuration file as accessible from where you run it. (a full pathname or a name relative to the current directory at startup) Optionally you can pass a second parameter "debuglevel" to get more detailed logging messages. Only one debuglevel is supported at this time, you can use "1" as level: /path/to/elproxy /path/to/ELProxy.conf 1 As always, it it wise to run it as a nonprivileged user. It does not require any root rights to run, except that you need to make the logfile writable for the user you want to run as. The program writes its operational status to a file (default /dev/shm/elproxy) that you can "cat" to see what is going on, or it can be monitored by nagios using the nagios plugin check_statusfile, using a command like: define command { command_name check_elproxy command_line /usr/lib/nagios/plugins/check_statusfile -a 10m /dev/shm/elproxy } This can be used to verify that the program is still running, and also to graph the statistiscs like number of used proxies. When this file disappears for no apparent reason, it probably is systemd doing it. Configure RemoveIPC=no in /etc/systemd/logind.conf to keep it at bay.