Archived
add_archive_project
This commit is contained in:
Executable
+25
@@ -0,0 +1,25 @@
|
||||
ipset_dir="/etc/xray/ipset"
|
||||
ipnet_dir="/etc/xray/ipnet"
|
||||
dnsmasq_dir="/etc/dnsmasq.d"
|
||||
user_ipset_file="$ipset_dir/xray_ip_user.lst"
|
||||
user_ipset_whitelist_file="$ipset_dir/xray_ip_user_whitelist.lst"
|
||||
user_dnsmasq_file="$ipset_dir/xray_domain_user.lst"
|
||||
user_dnsmasq_whitelist_file="$ipset_dir/xray_domain_user_whitelist.lst"
|
||||
log_dir="/var/log/xray"
|
||||
|
||||
mkdir -p "$ipset_dir" "$ipnet_dir" "$dnsmasq_dir"
|
||||
[ -f "$user_ipset_file" ] || touch "$user_ipset_file"
|
||||
[ -f "$user_ipset_whitelist_file" ] || touch "$user_ipset_whitelist_file"
|
||||
[ -f "$user_dnsmasq_file" ] || touch "$user_dnsmasq_file"
|
||||
[ -f "$user_dnsmasq_whitelist_file" ] || touch "$user_dnsmasq_whitelist_file"
|
||||
|
||||
mkdir -p "$log_dir"
|
||||
if ! grep -q "mkdir -p $log_dir" /etc/rc.local; then
|
||||
sed -i "/exit 0/i mkdir -p $log_dir" /etc/rc.local
|
||||
fi
|
||||
|
||||
current_confdir=$(uci get dhcp.@dnsmasq[0].confdir 2>/dev/null)
|
||||
if [ "$current_confdir" != "$dnsmasq_dir" ]; then
|
||||
uci set dhcp.@dnsmasq[0].confdir='/etc/dnsmasq.d'
|
||||
uci commit dhcp
|
||||
fi
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/sbin/nft -f
|
||||
|
||||
table ip xray {
|
||||
set dst_list {
|
||||
type ipv4_addr
|
||||
auto-merge
|
||||
flags interval
|
||||
}
|
||||
|
||||
set dst_exclude {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
}
|
||||
|
||||
set src_list {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
elements = { 10.1.0.0/24, 10.2.0.0/24 }
|
||||
}
|
||||
|
||||
set src_exclude {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
elements = { 10.1.0.6/32 }
|
||||
}
|
||||
|
||||
chain prerouting {
|
||||
type filter hook prerouting priority mangle; policy accept;
|
||||
|
||||
ip saddr @src_list ip saddr != @src_exclude ip protocol tcp ip daddr @dst_list ip daddr != @dst_exclude tproxy to 127.0.0.1:61219 meta mark set 10
|
||||
ip saddr @src_list ip saddr != @src_exclude ip protocol udp ip daddr @dst_list ip daddr != @dst_exclude tproxy to 127.0.0.1:61219 meta mark set 10
|
||||
}
|
||||
}
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
nft_table="xray"
|
||||
nft_set="dst_list"
|
||||
nft_set_exclude="dst_exclude"
|
||||
|
||||
ipset_dir="/etc/xray/ipset"
|
||||
dnsmasq_dir="/etc/dnsmasq.d"
|
||||
|
||||
for ipset_file in "$ipset_dir"/xray_domain*; do
|
||||
ipset_filename=$(basename "$ipset_file")
|
||||
ipnet_file="$dnsmasq_dir/$ipset_filename"
|
||||
|
||||
if echo "$ipset_filename" | grep -qiE "exclude|white"; then
|
||||
target_set="$nft_set_exclude"
|
||||
else
|
||||
target_set="$nft_set"
|
||||
fi
|
||||
|
||||
awk -v t_set="$target_set" -v table="$nft_table" '
|
||||
/^[[:space:]]*#/ || /^[[:space:]]*$/ { next }
|
||||
{
|
||||
sub(/#.*/, "")
|
||||
gsub(/[[:space:]]/, "")
|
||||
if ($0 !~ /\./) next
|
||||
sub(/^[^:]+:/, "", $0)
|
||||
if ($0 ~ /@cn$/) next
|
||||
sub(/@[^@]+$/, "", $0)
|
||||
print "nftset=/" $0 "/4#ip#" table "#" t_set
|
||||
}
|
||||
' "$ipset_file" > "$ipnet_file"
|
||||
|
||||
|
||||
if ! dnsmasq --test -C "$ipnet_file" >/dev/null 2>&1; then
|
||||
logger -t xray-prepare_domain "$dnsmasq_dir/$ipset_filename: validation failed"
|
||||
fi
|
||||
done
|
||||
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
nft_table="xray"
|
||||
nft_set="dst_list"
|
||||
nft_set_exclude="dst_exclude"
|
||||
|
||||
ipset_dir="/etc/xray/ipset"
|
||||
ipnet_dir="/etc/xray/ipnet"
|
||||
|
||||
for ipset_file in "$ipset_dir"/xray_ip*; do
|
||||
ipset_filename=$(basename "$ipset_file")
|
||||
ipnet_file="$ipnet_dir/$ipset_filename"
|
||||
|
||||
if [ ! -s "$ipset_file" ] || ! grep -q "[^[:space:]]" "$ipset_file"; then
|
||||
logger -t xray-prepare_net "$ipset_dir/$ipset_filename: file is empty"
|
||||
continue
|
||||
fi
|
||||
|
||||
if echo "$ipset_filename" | grep -qiE "exclude|white"; then
|
||||
target_set="$nft_set_exclude"
|
||||
else
|
||||
target_set="$nft_set"
|
||||
fi
|
||||
|
||||
{
|
||||
echo -n "add element ip $nft_table $target_set { "
|
||||
awk '
|
||||
/^[[:space:]]*#/ || /^[[:space:]]*$/ { next }
|
||||
{
|
||||
val = $0
|
||||
if (val !~ /\//) val = val "/32"
|
||||
printf "%s%s", (count++ ? ", " : ""), val
|
||||
}
|
||||
' "$ipset_file"
|
||||
echo " }"
|
||||
} > "$ipnet_file"
|
||||
|
||||
if ! nft -c -f "$ipnet_file" >/dev/null 2>&1; then
|
||||
logger -t xray-prepare_net "$ipnet_dir/$ipset_filename has errors"
|
||||
fi
|
||||
done
|
||||
Reference in New Issue
Block a user