Initial ZIP contents
This commit is contained in:
commit
0245ab71c8
6 changed files with 3189 additions and 0 deletions
87
ELProxy.conf
Normal file
87
ELProxy.conf
Normal file
|
@ -0,0 +1,87 @@
|
|||
# EchoLink Proxy Configuration File
|
||||
|
||||
# REQUIRED ITEMS
|
||||
|
||||
# This is the default proxy password used when no specific password is set
|
||||
# for a proxy instance.
|
||||
# You must change the password to something besides "notset".
|
||||
# Set it to "PUBLIC" to run a public proxy.
|
||||
Password=notset
|
||||
|
||||
|
||||
# OPTIONAL ITEMS
|
||||
|
||||
# Logfile for connections and errors.
|
||||
LogFile=/var/log/elproxy
|
||||
|
||||
# Statusfile for active connections, usually put in RAMdisk.
|
||||
StatusFile=/dev/shm/elproxy
|
||||
|
||||
# Change Port to something else if you don't want to use the default.
|
||||
# (If you use 1023 or below on Unix/Linux systems, you will need to run
|
||||
# EchoLink Proxy as root.)
|
||||
Port=8100
|
||||
|
||||
# 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
|
||||
|
||||
# It is possible to set a password per proxy instance, e.g. when you want
|
||||
# to run a couple of private proxies in addition to a number of public
|
||||
# proxies. When no Password_nn value is found, the global password is used.
|
||||
#Password_0=MyPassWord
|
||||
|
||||
|
||||
# Set the number of relays you want to run
|
||||
NumberOfRelays=0
|
||||
|
||||
# Set the address for each of the relays defined in NumberOfRelays above.
|
||||
# This is the public address on which this relay instance will be running.
|
||||
# Relays are numbered from 0 up to NumberOfRelays-1, but holes in the
|
||||
# list can be created by omitting the relay with that number.
|
||||
Relay_0=your.domain.name
|
||||
|
||||
# ADVANCED ITEMS
|
||||
|
||||
# Automatically become daemon process when set to 1
|
||||
Daemonize=1
|
||||
|
||||
# Set the ConnectionTimeout to something besides 0 if you want the proxy
|
||||
# to "pull the plug" on a client that has been using the proxy for more
|
||||
# than n minutes, regardless of whether an EchoLink connection is active.
|
||||
ConnectionTimeout=0
|
||||
|
||||
# Set RegistrationName to something unique (such as your callsign) if you
|
||||
# want EchoLink Proxy to register itself with the EchoLink Web site.
|
||||
# Enable this option only if you want the IP address of this server to
|
||||
# be listed on the Web page. You might want to do this if the IP address
|
||||
# of your server changes from time to time and you need to find out what
|
||||
# it is. The Comment is optional.
|
||||
# Note: If you want to "advertise" this Proxy as a Public proxy, and make
|
||||
# it available to any EchoLink user, set the Password above to PUBLIC
|
||||
# and set RegistrationName below to something unique, such as your call.
|
||||
# This will cause the proxy to be also be listed on the Proxy List page
|
||||
# on the EchoLink Web site. Note that each RegistrationName must be
|
||||
# different for each instance. To facilitate this, a printf-style
|
||||
# format like %03d or %d can be used to set the instance number.
|
||||
RegistrationName=yourcallsign
|
||||
RegistrationComment=yourcomment
|
||||
|
||||
# If you want to restrict access to the proxy only to certain callsigns,
|
||||
# create regular expressions for either or both of the following. A
|
||||
# connection will be denied if it matches the CallsignsDenied pattern, or
|
||||
# if it does NOT match the CallsignsAllowed pattern (and CallsignsAllowed
|
||||
# is not empty). These patterns apply only to EchoLink clients that use
|
||||
# this proxy, not the nodes to which they connect while using it.
|
||||
# Examples: CallsignsAllowed=K1RFD|AK8V will allow K1RFD and AK8V to use this proxy.
|
||||
# CallsignsDenied=.*-L$|.*-R$ will deny any Sysop nodes from using it.
|
||||
#CallsignsDenied=.*-L$|.*-R$
|
||||
#CallsignsAllowed=
|
4
Makefile
Normal file
4
Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
all: elproxy
|
||||
|
||||
elproxy: elproxy.c
|
||||
gcc -O3 -finline-functions-called-once -finline-small-functions -Wall elproxy.c -s -o elproxy -lnettle
|
116
README
Normal file
116
README
Normal file
|
@ -0,0 +1,116 @@
|
|||
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.
|
95
init.d-elproxy
Executable file
95
init.d-elproxy
Executable file
|
@ -0,0 +1,95 @@
|
|||
#! /bin/bash
|
||||
# setup echolink proxies - Rob Janssen
|
||||
#
|
||||
# /etc/init.d/elproxy
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: elproxy
|
||||
# Required-Start: cron
|
||||
# Required-Stop:
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Description: Configure special network interface and start el proxies
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
PROG="elproxy"
|
||||
DAEMON=/home/elproxy/elproxy
|
||||
CONFIG=/home/elproxy/ELProxy.conf
|
||||
STATFILE=/dev/shm/elproxy
|
||||
PIDFILE=/var/run/$PROG.pid
|
||||
LOGFILE=/var/log/$PROG
|
||||
ERRLOG=/var/log/$PROG.err
|
||||
RUNASUSER=elproxy
|
||||
ELPROXIF="dummy0"
|
||||
ELPROXNET="44.137.75"
|
||||
|
||||
test -x $DAEMON || exit 5
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Starting elproxy daemon"
|
||||
|
||||
## Check about pid file
|
||||
if [ -e $PIDFILE ]; then
|
||||
if $0 status > /dev/null ; then
|
||||
log_failure_msg "$PROG is already started; not starting"
|
||||
return
|
||||
else
|
||||
log_progress_msg "[Removing stale PID file $PIDFILE]"
|
||||
rm -f $PIDFILE
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starting interface"
|
||||
modprobe dummy
|
||||
ifconfig $ELPROXIF $ELPROXNET.1/24 up
|
||||
|
||||
for i in {2..249}
|
||||
do
|
||||
ip addr add $ELPROXNET.$i/32 dev $ELPROXIF
|
||||
done
|
||||
|
||||
echo "Starting proxies"
|
||||
touch $LOGFILE
|
||||
chown $RUNASUSER.$RUNASUSER $LOGFILE
|
||||
sleep 2
|
||||
|
||||
start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --chuid $RUNASUSER --startas $DAEMON -- $CONFIG >>$ERRLOG 2>&1
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo "Stopping proxies"
|
||||
start-stop-daemon --stop --pidfile $PIDFILE
|
||||
rm -f $STATFILE
|
||||
sleep 10
|
||||
|
||||
echo "Stopping interface"
|
||||
for i in {2..249}
|
||||
do
|
||||
ip addr del $ELPROXNET.$i/32 dev $ELPROXIF 2>/dev/null
|
||||
done
|
||||
|
||||
ifconfig $ELPROXIF down
|
||||
;;
|
||||
|
||||
restart)
|
||||
$0 stop; sleep 2; $0 start
|
||||
;;
|
||||
|
||||
reload)
|
||||
echo "Reloading proxies"
|
||||
killall -9 $DAEMON
|
||||
rm -f $STATFILE $PIDFILE
|
||||
sleep 2
|
||||
start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --chuid $RUNASUSER --startas $DAEMON -- $CONFIG >>$ERRLOG 2>&1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
12
logrotate.d-elproxy
Normal file
12
logrotate.d-elproxy
Normal file
|
@ -0,0 +1,12 @@
|
|||
/var/log/elproxy {
|
||||
missingok
|
||||
notifempty
|
||||
weekly
|
||||
rotate 9
|
||||
compress
|
||||
delaycompress
|
||||
create 0644 elproxy elproxy
|
||||
postrotate
|
||||
killall -HUP elproxy
|
||||
endscript
|
||||
}
|
Loading…
Reference in a new issue