mirror of
https://github.com/samuelhbne/server-xray.git
synced 2025-12-16 20:07:06 +03:00
Initial Nginx SNI stream map support
This commit is contained in:
161
run.sh
161
run.sh
@@ -8,12 +8,14 @@ XCONF=/tmp/server-xray.json
|
||||
usage() {
|
||||
echo "server-xray <server-options>"
|
||||
echo " --lgp <VLESS-GRPC-PLN option> p=11443,u=id1,u=id2...,s=svcname"
|
||||
echo " --lgr <VLESS-GRPC-RLTY option> p=12443,u=id1,u=id2...,s=svcname,d=dest.com,pub=xx,prv=yy[,shortId=zz]"
|
||||
echo " --lgr <VLESS-GRPC-RLTY option> p=12443,u=id1,u=id2...,s=svcname,d=dest.com,pub=xx,prv=yy[,shortId=ab]"
|
||||
echo " --lgt <VLESS-GRPC-TLS option> p=13443,u=id1,u=id2...,s=svcname,d=domain.com"
|
||||
echo " --lsp <VLESS-SPLT-PLN option> p=14443,u=id1,u=id2...,w=/webpath"
|
||||
echo " --lst <VLESS-SPLT-TLS option> p=16443,u=id1,u=id2...,w=/webpath,d=domain.com"
|
||||
echo " --ltr <VLESS-TCP-RLTY option> p=17443,u=id1,u=id2...,[xtls],d=dest.com,pub=xx,prv=yy[,shortId=zz]"
|
||||
echo " --ltt <VLESS-TCP-TLS option> p=18443,u=id1,u=id2...,[xtls],d=domain.com"
|
||||
echo " --ltr <VLESS-TCP-RLTY option> p=17443,u=id1,u=id2...,d=dest.com,pub=xx,prv=yy[,shortId=ab],[xtls]"
|
||||
echo " --ltrx <VLESS-TCP-RLTY option> p=17443,u=id1,u=id2...,d=dest.com,pub=xx,prv=yy[,shortId=ab]"
|
||||
echo " --ltt <VLESS-TCP-TLS option> p=18443,u=id1,u=id2...,d=domain.com,[xtls]"
|
||||
echo " --lttx <VLESS-TCP-TLS option> p=18443,u=id1,u=id2...,d=domain.com"
|
||||
echo " --lwp <VLESS-WS-PLN option> p=19443,u=id1,u=id2...,w=/wskpath"
|
||||
echo " --lwt <VLESS-WS-TLS option> p=22443,u=id1,u=id2...,w=/wskpath,d=domain.com"
|
||||
echo " --mtt <VMESS-TCP-TLS option> p=23443,u=id1,u=id2...,d=domain.com"
|
||||
@@ -22,13 +24,15 @@ usage() {
|
||||
echo " --ttt <TROJAN-TCP-TLS option> p=26443,u=pw1,u=pw2...,d=domain.com"
|
||||
echo " --twp <TROJAN-WS-PLN option> p=27443,u=pw1,u=pw2...,w=/wskpath"
|
||||
echo " --twt <TROJAN-WS-TLS option> p=28443,u=pw1,u=pw2...,w=/wskpath,d=domain.com"
|
||||
echo " --ng-opt <nginx-options> p=443,d=domain0.com,d=domain1.com..."
|
||||
echo " --ng-proxy <nginx-proxy-options> d=domain0.com,d=domain1.com,p=port-backend,l=location,n=ws|grpc|splt"
|
||||
echo " --domain-block <domain-rule> Add a domain rule for routing block, like geosite:category-ads-all"
|
||||
echo " --ip-block <ip-rule> Add a ip-addr rule for routing block, like geoip:private"
|
||||
echo " --ng-server <nginx-server-options> p=8443,d=domain0.com,d=domain1.com..."
|
||||
echo " --ng-proxy <nginx-proxy-options> d=domain0.com,d=domain1.com,p=port-backend,l=location,n=ws|grpc|splt"
|
||||
echo " --st-port <stream-port-number> 443"
|
||||
echo " --st-map <stream-map-options> sni=domain.com,ups=127.0.0.1:8443"
|
||||
echo " --domain-block <domain-rule> Add a domain rule for routing-server block, like geosite:category-ads-all"
|
||||
echo " --ip-block <ip-rule> Add a ip-addr rule for routing block, like geoip:private"
|
||||
echo " --cn-block Add routing rules to avoid domains and IPs located in China being proxied"
|
||||
echo " -u|--user <global-user-options> u=id0,u=id1..."
|
||||
echo " -k|--hook <hook-url> DDNS update or notifing URL to be hit"
|
||||
echo " -u|--user <global-user-options> u=id0,u=id1..."
|
||||
echo " -k|--hook <hook-url> DDNS update or notifing URL to be hit"
|
||||
echo " -r|--request-domain <domain-name> Domain name to request for letsencrypt cert"
|
||||
echo " -c|--cert-home <cert-home-dir> Reading TLS certs from folder <cert-home-dir>/<domain-name>/"
|
||||
echo " -i|--stdin Read config from STDIN instead of auto generation"
|
||||
@@ -38,7 +42,7 @@ usage() {
|
||||
|
||||
Jrules='{"rules":[]}'
|
||||
|
||||
TEMP=`getopt -o u:k:r:c:j:di --long user:,hook:,request-domain:,cert-home:,ip-block:,domain-block:,cn-block,lgp:,lgr:,lgt:,lsp:,lst:,ltr:,ltt:,lwp:,lwt:,mtt:,mwp:,mwt:,ttt:,twp:,twt:,ng-opt:,ng-proxy:,json:,stdin,debug -n "$0" -- $@`
|
||||
TEMP=`getopt -o u:k:r:c:j:di --long lgp:,lgr:,lgt:,lsp:,lst:,ltr:,ltrx:,ltt:,lttx:,lwp:,lwt:,mtt:,mwp:,mwt:,ttt:,twp:,twt:,user:,hook:,request-domain:,cert-home:,ip-block:,domain-block:,cn-block,ng-server:,ng-proxy:,st-port:,st-map:,json:,stdin,debug -n "$0" -- $@`
|
||||
if [ $? != 0 ] ; then usage; exit 1 ; fi
|
||||
|
||||
eval set -- "$TEMP"
|
||||
@@ -77,6 +81,12 @@ while true ; do
|
||||
SVCMD+=("${DIR}/server-${SVC}.sh $2")
|
||||
shift 2
|
||||
;;
|
||||
# Alias options
|
||||
--ltrx|--lttx)
|
||||
SVC=`echo $1|tr -d '\-\-'|tr -d x`
|
||||
SVCMD+=("${DIR}/server-${SVC}.sh $2,xtls")
|
||||
shift 2
|
||||
;;
|
||||
--domain-block)
|
||||
Jrules=`echo "${Jrules}" | jq --arg blkdomain "$2" \
|
||||
'.rules += [{"type":"field", "outboundTag":"block", "domain":[$blkdomain]}]'`
|
||||
@@ -96,14 +106,22 @@ while true ; do
|
||||
'.rules += [{"type":"field", "outboundTag":"block", "ip":[$ignip]}]'`
|
||||
shift 1
|
||||
;;
|
||||
--ng-opt)
|
||||
NGOPT+=("$2")
|
||||
--ng-server)
|
||||
NGSVR+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
--ng-proxy)
|
||||
NGPROXY+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
--st-port)
|
||||
STPORT="$2"
|
||||
shift 2
|
||||
;;
|
||||
--st-map)
|
||||
STMAP+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
@@ -161,59 +179,80 @@ Jrouting='{"routing": {"domainStrategy":"AsIs"}}'
|
||||
Jrouting=`echo "${Jrouting}" |jq --argjson jrules "${Jrules}" '.routing += $jrules'`
|
||||
cat $XCONF| jq --argjson jrouting "${Jrouting}" '. += $jrouting' | sponge $XCONF
|
||||
|
||||
if [ -n "${SVCMD}" ]; then
|
||||
for svcmd in "${SVCMD[@]}"
|
||||
# Run Xray only. Read Xray config from STDIN
|
||||
if [ "${STDINCONF}" = "1" ]; then
|
||||
exec /usr/local/bin/xray
|
||||
fi
|
||||
|
||||
if [ -z "${SVCMD}" ]; then
|
||||
echo "No Xray service creation found. Quit."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start Nginx if necessary
|
||||
if [ -n "${STPORT}" ]; then
|
||||
NGOPT="--st-port ${STPORT}"
|
||||
for mapopt in "${STMAP[@]}"
|
||||
do
|
||||
svcmd="$svcmd,$xopt"
|
||||
$svcmd
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo
|
||||
echo "Command failed: $svcmd"
|
||||
exit 1
|
||||
fi
|
||||
NGOPT="${NGOPT} --st-map $mapopt"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${DEBUG}" = "1" ]; then
|
||||
cat $XCONF |jq '.log.loglevel |="debug"' |sponge $XCONF
|
||||
if [ -n "${NGSVR}" ]; then
|
||||
for svropt in "${NGSVR[@]}"
|
||||
do
|
||||
NGOPT="${NGOPT} --ng-server ${svropt},$xopt"
|
||||
done
|
||||
for pxyopt in "${NGPROXY[@]}"
|
||||
do
|
||||
NGOPT="${NGOPT} --ng-proxy ${pxyopt}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "${NGOPT}" ]; then
|
||||
ngcmd="${DIR}/server-nginx.sh $NGOPT"
|
||||
$ngcmd
|
||||
ret=$?; if [ $ret != 0 ]; then
|
||||
echo ""
|
||||
echo "Nginx config generation failed from the following cmd:\n$ngcmd";
|
||||
echo "Please check log for details"
|
||||
exit $ret;
|
||||
fi
|
||||
killall nginx
|
||||
nginx;
|
||||
fi
|
||||
|
||||
# Xray service config generation
|
||||
for svcmd in "${SVCMD[@]}"
|
||||
do
|
||||
svcmd="$svcmd,$xopt"
|
||||
$svcmd
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo
|
||||
fi
|
||||
|
||||
if [ -n "${NGOPT}" ]; then
|
||||
ngcmd="${DIR}/server-nginx.sh"
|
||||
for ngopt in "${NGOPT[@]}"
|
||||
do
|
||||
ngcmd="${ngcmd} --ng-opt ${ngopt},$xopt"
|
||||
done
|
||||
for ngproxy in "${NGPROXY[@]}"
|
||||
do
|
||||
ngcmd="${ngcmd} --ng-proxy ${ngproxy}"
|
||||
done
|
||||
$ngcmd
|
||||
ret=$?; if [ $ret != 0 ] ; then echo "\nNon-zero result $ret from the following cmd:\n$ngcmd"; exit $ret ; fi
|
||||
nginx;
|
||||
fi
|
||||
|
||||
if [ -n "${INJECT}" ]; then
|
||||
for JSON_IN in "${INJECT[@]}"
|
||||
do
|
||||
echo "${JSON_IN}"|jq -ec >/tmp/merge.json
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Invalid json ${JSON_IN}"
|
||||
exit 1
|
||||
fi
|
||||
jq -s '.[0] * .[1]' $XCONF /tmp/merge.json |sponge $XCONF
|
||||
done
|
||||
fi
|
||||
|
||||
cat $XCONF
|
||||
echo
|
||||
exec /usr/local/bin/xray -c $XCONF
|
||||
|
||||
else
|
||||
if [ "${STDINCONF}" = "1" ]; then
|
||||
exec /usr/local/bin/xray
|
||||
else
|
||||
usage
|
||||
echo "Service creation command failed: $svcmd"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${DEBUG}" = "1" ]; then
|
||||
cat $XCONF |jq '.log.loglevel |="debug"' |sponge $XCONF
|
||||
echo
|
||||
fi
|
||||
|
||||
if [ -n "${INJECT}" ]; then
|
||||
for JSON_IN in "${INJECT[@]}"
|
||||
do
|
||||
echo "${JSON_IN}"|jq -ec >/tmp/merge.json
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Invalid json ${JSON_IN}"
|
||||
exit 1
|
||||
fi
|
||||
jq -s '.[0] * .[1]' $XCONF /tmp/merge.json |sponge $XCONF
|
||||
done
|
||||
fi
|
||||
|
||||
cat $XCONF
|
||||
echo
|
||||
exec /usr/local/bin/xray -c $XCONF
|
||||
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user