aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorWilliam Fleurant <meshnet@protonmail.com>2023-12-20 19:00:01 +0100
committerTianling Shen <cnsztl@gmail.com>2024-04-02 21:37:35 +0800
commit828bbd61d60c7844e82eb5d53dfbbded1b321d53 (patch)
tree80b7d79f7ee926c4a38ed622f0eaaeb95ef83e89 /net
parent3637786850db3ae10b456b281edb1a0180f67c0c (diff)
yggdrasil-jumper: add multiple ygg support
Signed-off-by: William Fleurant <meshnet@protonmail.com>
Diffstat (limited to 'net')
-rw-r--r--net/yggdrasil-jumper/Makefile32
-rw-r--r--net/yggdrasil-jumper/files/yggdrasil-jumper.defaults47
-rwxr-xr-xnet/yggdrasil-jumper/files/yggdrasil-jumper.init112
3 files changed, 181 insertions, 10 deletions
diff --git a/net/yggdrasil-jumper/Makefile b/net/yggdrasil-jumper/Makefile
index 2723ca7e6..d8e40b889 100644
--- a/net/yggdrasil-jumper/Makefile
+++ b/net/yggdrasil-jumper/Makefile
@@ -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))
diff --git a/net/yggdrasil-jumper/files/yggdrasil-jumper.defaults b/net/yggdrasil-jumper/files/yggdrasil-jumper.defaults
new file mode 100644
index 000000000..5954370cb
--- /dev/null
+++ b/net/yggdrasil-jumper/files/yggdrasil-jumper.defaults
@@ -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
diff --git a/net/yggdrasil-jumper/files/yggdrasil-jumper.init b/net/yggdrasil-jumper/files/yggdrasil-jumper.init
new file mode 100755
index 000000000..b1e6acb6f
--- /dev/null
+++ b/net/yggdrasil-jumper/files/yggdrasil-jumper.init
@@ -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
+}
+
+