mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 02:51:50 +00:00
202 lines
6.2 KiB
Bash
Executable file
202 lines
6.2 KiB
Bash
Executable file
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2018-2022 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
|
# shellcheck disable=SC2039
|
|
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
|
|
|
|
# shellcheck disable=SC2034
|
|
{
|
|
START=99
|
|
STOP=10
|
|
USE_PROCD=1
|
|
}
|
|
|
|
set_shadowsocks_address() {
|
|
uci -q set shadowsocks-libev.$1.local_address="$2"
|
|
}
|
|
set_shadowsocks_rust_address() {
|
|
uci -q set shadowsocks-rust.$1.local_address="$2"
|
|
}
|
|
|
|
set_ipv6_state() {
|
|
local disable_6in4="$(uci -q get openmptcprouter.settings.disable_6in4)"
|
|
local disable_ipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)"
|
|
[ -z "$disable_ipv6" ] && disable_ipv6="1"
|
|
#previous=$(sysctl -qn net.ipv6.conf.all.disable_ipv6 | tr -d "\n")
|
|
previous="$(uci -q get network.lan.ipv6)"
|
|
#sysctl -qw net.ipv6.conf.all.disable_ipv6=$disable_ipv6
|
|
#sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*:net.ipv6.conf.all.disable_ipv6=$disable_ipv6:" /etc/sysctl.d/zzz_openmptcprouter.conf
|
|
sed -i "s:^net.ipv6.conf.all.disable_ipv6=[0-9]*::" /etc/sysctl.d/zzz_openmptcprouter.conf
|
|
sysctl -qw net.ipv6.conf.all.disable_ipv6=0
|
|
|
|
#uci -q batch <<-EOF >/dev/null
|
|
# set firewall.@defaults[0].disable_ipv6=$disable_ipv6
|
|
# commit firewall
|
|
#EOF
|
|
|
|
if [ "$disable_ipv6" = "1" ]; then
|
|
logger -t "omr-6in4" "Disable IPv6"
|
|
if [ "$disable_6in4" != "1" ]; then
|
|
uci -q batch <<-EOF >/dev/null
|
|
del_list v2ray.main.inbounds="omr6"
|
|
commit v2ray
|
|
EOF
|
|
fi
|
|
uci -q batch <<-EOF >/dev/null
|
|
set unbound.@unbound[-1].protocol='ip4_only'
|
|
commit unbound
|
|
EOF
|
|
config_load shadowsocks-libev
|
|
config_foreach set_shadowsocks_address ss_redir "0.0.0.0"
|
|
config_load shadowsocks-rust
|
|
config_foreach set_shadowsocks_rust_address ss_redir "0.0.0.0"
|
|
uci -q batch <<-EOF >/dev/null
|
|
commit shadowsocks-libev
|
|
commit shadowsocks-rust
|
|
EOF
|
|
if [ "$(uci -q get omr-tracker.defaults.family)" != "ipv4" ]; then
|
|
uci -q batch <<-EOF >/dev/null
|
|
set omr-tracker.defaults.family='ipv4'
|
|
commit omr-tracker
|
|
EOF
|
|
/etc/init.d/omr-tracker restart
|
|
fi
|
|
[ ! -f /etc/wgetrc ] && cp /etc/wgetrc4 /etc/wgetrc
|
|
else
|
|
logger -t "omr-6in4" "Enable IPv6"
|
|
if [ "$disable_6in4" != "1" ]; then
|
|
uci -q batch <<-EOF >/dev/null
|
|
set network.lan.delegate="0"
|
|
set network.omr6in4.force_link=1
|
|
set network.omr6in4.metric=1
|
|
delete network.omr6in4.auto
|
|
EOF
|
|
if [ "$(uci -q get network.globals.ula_prefix)" = "" ]; then
|
|
r1=$(dd if=/dev/urandom bs=1 count=1 |hexdump -e '1/1 "%02x"')
|
|
r2=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"')
|
|
r3=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"')
|
|
uci -q set network.globals.ula_prefix=fd$r1:$r2:$r3::/48
|
|
fi
|
|
fi
|
|
uci -q batch <<-EOF >/dev/null
|
|
set unbound.@unbound[-1].protocol='mixed'
|
|
commit unbound
|
|
EOF
|
|
config_load shadowsocks-libev
|
|
config_foreach set_shadowsocks_address ss_redir "::"
|
|
config_load shadowsocks-rust
|
|
config_foreach set_shadowsocks_rust_address ss_redir "::"
|
|
uci -q batch <<-EOF >/dev/null
|
|
commit network
|
|
commit dhcp
|
|
commit shadowsocks-libev
|
|
commit shadowsocks-rust
|
|
EOF
|
|
/etc/init.d/shadowsocks-libev restart
|
|
/etc/init.d/shadowsocks-rust restart
|
|
if [ "$(uci -q get v2ray.main.inbounds | grep omr6)" = "" ]; then
|
|
uci -q batch <<-EOF >/dev/null
|
|
add_list v2ray.main.inbounds="omr6"
|
|
commit v2ray
|
|
EOF
|
|
/etc/init.d/v2ray restart
|
|
fi
|
|
if [ "$(uci -q get omr-tracker.defaults.family)" == "ipv4" ]; then
|
|
uci -q batch <<-EOF >/dev/null
|
|
set omr-tracker.defaults.family='ipv4ipv6'
|
|
commit omr-tracker
|
|
EOF
|
|
/etc/init.d/omr-tracker restart
|
|
fi
|
|
|
|
rm -f /etc/wgetrc
|
|
fi
|
|
/etc/init.d/odhcpd restart
|
|
if [ "$previous" != "1" ]; then
|
|
env -i /bin/ubus call network reload
|
|
fi
|
|
}
|
|
|
|
set_ipv6_state_intf() {
|
|
local disable_ipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)"
|
|
local intf="$1"
|
|
config_get ip4table $intf ip4table
|
|
config_get ipv6 $intf ipv6 "0"
|
|
if [ "$ip4table" = "lan" ]; then
|
|
if [ "$disable_ipv6" = "1" ] && [ "$ipv6" != "0" ]; then
|
|
logger -t "omr-6in4" "Disable IPv6 on ${intf}"
|
|
uci -q batch <<-EOF >/dev/null
|
|
set dhcp.${intf}.ra_default="0"
|
|
delete network.${intf}.ipv6
|
|
delete dhcp.${intf}.dhcpv6
|
|
delete dhcp.${intf}.ra
|
|
delete dhcp.${intf}.ra_default
|
|
delete dhcp.${intf}.ra_management
|
|
delete dhcp.${intf}.ra_preference
|
|
commit network
|
|
commit dhcp
|
|
EOF
|
|
elif [ "$disable_ipv6" != "1" ] && [ "$ipv6" != "1" ]; then
|
|
logger -t "omr-6in4" "Enable IPv6 on ${intf}"
|
|
uci -q batch <<-EOF >/dev/null
|
|
set dhcp.${intf}.dhcpv6="server"
|
|
set dhcp.${intf}.ra="server"
|
|
set dhcp.${intf}.ra_default="1"
|
|
set dhcp.${intf}.ra_preference="high"
|
|
set dhcp.${intf}.ra_management="1"
|
|
delete dhcp.${intf}.ra_flags
|
|
add_list dhcp.${intf}.ra_flags='managed-config'
|
|
set dhcp.${intf}.ra_slaac='1'
|
|
add_list dhcp.${intf}.ra_flags='other-config'
|
|
set network.${intf}.ipv6="1"
|
|
set network.${intf}.delegate="0"
|
|
EOF
|
|
if [ "$(uci -q get network.${intf}.ip6assign)" = "" ]; then
|
|
uci -q set network.${intf}.ip6assign='60'
|
|
fi
|
|
uci -q batch <<-EOF >/dev/null
|
|
commit network
|
|
commit dhcp
|
|
EOF
|
|
fi
|
|
fi
|
|
}
|
|
|
|
start_service() {
|
|
[ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && {
|
|
if [ "$(uci -q get openmptcprouter.settings.disable_6in4)" != "1" ]; then
|
|
config_load network
|
|
config_foreach set_ipv6_state_intf interface
|
|
fi
|
|
set_ipv6_state
|
|
}
|
|
[ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "0" ] && {
|
|
if [ "$(uci -q get openmptcprouter.settings.disable_6in4)" != "1" ]; then
|
|
config_load network
|
|
config_foreach set_ipv6_state_intf interface
|
|
fi
|
|
ifdown omr6in4
|
|
[ -z "$(/etc/init.d/odhcpd status | grep inactive)" ] && /etc/init.d/odhcpd stop
|
|
return
|
|
}
|
|
[ "$(uci -q get openmptcprouter.settings.disable_6in4)" != "1" ] && [ "$(ifstatus omr6in4 | jsonfilter -e '@.up' | tr -d '\n')" != "true" ] && ifup omr6in4
|
|
multipath 6in4-omr6in4 off 2>&1 >/dev/null
|
|
|
|
if [ "$(uci -q get openmptcprouter.settings.disable_6in4)" != "1" ]; then
|
|
procd_open_instance
|
|
# shellcheck disable=SC2086
|
|
procd_set_param command /bin/omr-6in4
|
|
procd_set_param limits nofile="51200 51200"
|
|
procd_set_param respawn 0 10 0
|
|
procd_set_param stderr 1
|
|
procd_close_instance
|
|
fi
|
|
}
|
|
|
|
#service_triggers() {
|
|
# procd_add_reload_trigger "openmptcprouter"
|
|
#}
|
|
|
|
reload_service() {
|
|
stop
|
|
start
|
|
}
|