yggdrasil-jumper: add multiple ygg support
Signed-off-by: William Fleurant <meshnet@protonmail.com>
This commit is contained in:
parent
3637786850
commit
828bbd61d6
|
@ -17,6 +17,7 @@ PKG_BUILD_PARALLEL:=1
|
|||
include $(INCLUDE_DIR)/package.mk
|
||||
include ../../lang/rust/rust-package.mk
|
||||
|
||||
|
||||
define Package/yggdrasil-jumper
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
|
@ -26,25 +27,36 @@ define Package/yggdrasil-jumper
|
|||
DEPENDS:=$(RUST_ARCH_DEPENDS) @!arc @IPV6 +kmod-tun
|
||||
endef
|
||||
|
||||
|
||||
define Package/yggdrasil-jumper/description
|
||||
Yggdrasil-jumper enhances the performance of data-intensive applications over the Yggdrasil
|
||||
network by establishing direct peer-to-peer connections, bypassing intermediary nodes.
|
||||
It utilizes NAT traversal to create a direct bridge to potentially reduce latency.
|
||||
Yggdrasil-Jumper utilizes NAT traversal for latency reduction within the Yggdrasil network by
|
||||
creating direct peer-to-peer connections. It offers self-activating NAT/Firewall traversal,
|
||||
eliminating the necessity for firewall or port configuration. It probles for Yggdrasil-Jumper
|
||||
of routers found in active sessions to leverage NAT traversal for constructing direct internet
|
||||
bridges.
|
||||
endef
|
||||
|
||||
# define Package/yggdrasil-jumper/conffiles
|
||||
# /etc/yggdrasil-jumper/yggdrasil-jumper.conf
|
||||
# endef
|
||||
|
||||
define Package/yggdrasil-jumper/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/uci-defaults $(1)/etc/init.d
|
||||
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/yggdrasil-jumper $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/stun-tcp $(1)/usr/sbin
|
||||
|
||||
# $(INSTALL_DIR) $(1)/etc/yggdrasil-jumper
|
||||
# $(INSTALL_CONF) ./files/etc/yggdrasil-jumper/yggdrasil-jumper.conf $(1)/etc/yggdrasil-jumper
|
||||
$(INSTALL_BIN) ./files/yggdrasil-jumper.defaults $(1)/etc/uci-defaults/yggdrasil-jumper
|
||||
|
||||
$(INSTALL_BIN) ./files/yggdrasil-jumper.init $(1)/etc/init.d/yggdrasil-jumper
|
||||
endef
|
||||
|
||||
|
||||
define Package/cjdns/postinst
|
||||
#!/bin/sh
|
||||
if [ -z $${IPKG_INSTROOT} ] ; then
|
||||
( . /etc/uci-defaults/yggdrasil-jumper ) && rm -f /etc/uci-defaults/yggdrasil-jumper
|
||||
/etc/init.d/yggdrasil-jumper enabled || /etc/init.d/yggdrasil-jumper enable
|
||||
exit 0
|
||||
fi
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call RustBinPackage,yggdrasil-jumper))
|
||||
$(eval $(call BuildPackage,yggdrasil-jumper))
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
#!/bin/sh
|
||||
|
||||
# if there is an existing config, our work is already done
|
||||
uci -q get yggdrasil-jumper.config.stun_server >/dev/null 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
# register commit handler
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@yggdrasil-jumper[-1]
|
||||
add ucitrack yggdrasil-jumper
|
||||
set ucitrack.@yggdrasil-jumper[-1].init=yggdrasil-jumper
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
# generate configuration
|
||||
touch /etc/config/yggdrasil-jumper
|
||||
|
||||
uci batch <<-EOF
|
||||
set yggdrasil-jumper.config=yggdrasil-jumper
|
||||
set yggdrasil-jumper.config.listen_port=4701
|
||||
set yggdrasil-jumper.config.allow_ipv4=1
|
||||
set yggdrasil-jumper.config.allow_ipv6=0
|
||||
add_list yggdrasil-jumper.config.stun_server='stunserver.stunprotocol.org:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='136.243.59.79:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='34.192.137.246:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='94.130.130.49:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='192.172.233.145:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='185.125.180.70:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='95.216.78.222:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='88.99.67.241:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='88.218.220.40:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='54.177.85.190:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='88.198.151.128:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='83.64.250.246:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='62.72.83.10:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='202.1.117.2:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='188.118.52.172:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='51.83.201.84:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='34.206.168.53:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='157.161.10.32:3478'
|
||||
add_list yggdrasil-jumper.config.stun_server='91.213.98.54:3478'
|
||||
set yggdrasil-jumper.config.stun_randomize=1
|
||||
commit yggdrasil-jumper
|
||||
EOF
|
||||
|
||||
fi
|
|
@ -0,0 +1,112 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=98
|
||||
STOP=98
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
YGG_JUMPER_INTERFACES=""
|
||||
|
||||
|
||||
envset_jumper_interfaces() {
|
||||
|
||||
all_ygg_interfaces=$(uci show network | grep ".proto='yggdrasil'" | awk -F '.' '{print $2}')
|
||||
|
||||
for interface in ${all_ygg_interfaces}; do
|
||||
|
||||
is_started_on_boot="$(uci -q get network.${interface}.auto)"
|
||||
|
||||
if [ "${is_started_on_boot}" == "0" ]; then
|
||||
: # Skip interface is is disabled
|
||||
else
|
||||
|
||||
is_yggdrasil_jumper_enabled="$(uci -q get network.${interface}.jumper)"
|
||||
|
||||
YGG_JUMPER_INTERFACES=" $YGG_JUMPER_INTERFACES ${interface} "
|
||||
|
||||
## - [ ] add jumper flag support in luci-proto-yggdrasil
|
||||
# if [ "${is_yggdrasil_jumper_enabled}" == "1" ]; then
|
||||
# : # Append yggdrasil + jumper interface to the global
|
||||
# YGG_JUMPER_INTERFACES=" $YGG_JUMPER_INTERFACES ${interface} "
|
||||
# fi
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
: # Strip leading/trailing space
|
||||
YGG_JUMPER_INTERFACES="$(echo ${YGG_JUMPER_INTERFACES} | xargs)"
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
uci_to_jumper_configs() {
|
||||
# remove stale not used configs avoiding confusion
|
||||
cfgs="/tmp/yggdrasil/*-jumper.conf"
|
||||
rm $cfgs
|
||||
|
||||
# scoop up uci details from /etc/config/yggdrasil-jumper
|
||||
admin_listen=$(uci -q get yggdrasil-jumper.config.admin_listen)
|
||||
listen_port=$(uci -q get yggdrasil-jumper.config.listen_port)
|
||||
allow_ipv4=$(uci -q get yggdrasil-jumper.config.allow_ipv4)
|
||||
allow_ipv6=$(uci -q get yggdrasil-jumper.config.allow_ipv6)
|
||||
stun_server=$(uci -q get yggdrasil-jumper.config.stun_server)
|
||||
stun_randomize=$(uci -q get yggdrasil-jumper.config.stun_randomize)
|
||||
|
||||
for interface in $YGG_JUMPER_INTERFACES; do
|
||||
ali="unix:///tmp/yggdrasil/${interface}.sock"
|
||||
cfg="/tmp/yggdrasil/${interface}-jumper.conf"
|
||||
: # write a interface-jumper.conf file for yggdrasil interface
|
||||
cat <<EOF > "${cfg}"
|
||||
yggdrasil_admin_listen = [ "${ali}" ]
|
||||
yggdrasil_listen = [ ]
|
||||
listen_port = $listen_port
|
||||
allow_ipv4 = $( [ "$allow_ipv4" = "1" ] && echo true || echo false )
|
||||
allow_ipv6 = $( [ "$allow_ipv6" = "1" ] && echo true || echo false )
|
||||
whitelist = [ ]
|
||||
stun_servers = [ "${stun_server// /\",\"}" ]
|
||||
stun_randomize = $( [ "$stun_randomize" = "1" ] && echo true || echo false )
|
||||
EOF
|
||||
done
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
start_service() {
|
||||
[ -f /etc/uci-defaults/yggdrasil-jumper ] && ( . /etc/uci-defaults/yggdrasil-jumper )
|
||||
|
||||
envset_jumper_interfaces
|
||||
|
||||
uci_to_jumper_configs
|
||||
|
||||
for interface in $YGG_JUMPER_INTERFACES; do
|
||||
jumper_cfg="/tmp/yggdrasil/${interface}-jumper.conf"
|
||||
procd_open_instance ${interface}
|
||||
procd_set_param respawn
|
||||
procd_set_param command yggdrasil-jumper --config "${jumper_cfg}"
|
||||
procd_set_param facility "yggdrasil-jumper-${interface}"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
|
||||
stop_service() {
|
||||
killall yggdrasil-jumper
|
||||
}
|
||||
|
||||
|
||||
x_reload_service() {
|
||||
:
|
||||
# cat /tmp/etc/cjdroute.conf | cjdrouteconf reload
|
||||
}
|
||||
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger yggdrasil-jumper
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue