Archived
42 lines
1.1 KiB
Bash
Executable File
42 lines
1.1 KiB
Bash
Executable File
#!/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
|