From 1dbeeaa46cdaff34241c0e7fb51c93d562036e01 Mon Sep 17 00:00:00 2001 From: Ptomerty Date: Sun, 25 Nov 2018 21:29:18 -0500 Subject: [PATCH 1/3] resolve domains in ss-nat --- src/ss-nat | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ss-nat b/src/ss-nat index 1dfcc77b..9374b76f 100755 --- a/src/ss-nat +++ b/src/ss-nat @@ -21,9 +21,9 @@ usage() { Valid options are: - -s ip address of shadowsocks remote server + -s Host name or IP address of shadowsocks remote server -l port number of shadowsocks local server - -S ip address of shadowsocks remote UDP server + -S Host name or IP address of shadowsocks remote UDP server -L port number of shadowsocks local UDP server -i a file content is bypassed ip list -I lan interface of nat, default: eth0 @@ -170,13 +170,13 @@ EOF while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do case "$arg" in s) - server=$OPTARG + server=$(dig +short $OPTARG) ;; l) local_port=$OPTARG ;; S) - SERVER=$OPTARG + SERVER=$(dig +short $OPTARG) ;; L) LOCAL_PORT=$OPTARG From f9cc909efa94310864b9c9bae3200aaf7c0c254a Mon Sep 17 00:00:00 2001 From: Ptomerty Date: Thu, 29 Nov 2018 21:33:17 -0500 Subject: [PATCH 2/3] check if dig exists first --- src/ss-nat | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/ss-nat b/src/ss-nat index 9374b76f..10b06fa8 100755 --- a/src/ss-nat +++ b/src/ss-nat @@ -10,6 +10,7 @@ TAG="SS_SPEC" # iptables tag IPT="iptables -t nat" # alias of iptables FWI=$(uci get firewall.shadowsocks.path 2>/dev/null) # firewall include file +REGEX="[^0-9.]" # used to check if hostnames have letters usage() { cat <<-EOF @@ -21,9 +22,9 @@ usage() { Valid options are: - -s Host name or IP address of shadowsocks remote server + -s hostname (requires dig) or ip address of shadowsocks remote server -l port number of shadowsocks local server - -S Host name or IP address of shadowsocks remote UDP server + -S hostname (requires dig) or ip address of shadowsocks remote UDP server -L port number of shadowsocks local UDP server -i a file content is bypassed ip list -I lan interface of nat, default: eth0 @@ -170,13 +171,29 @@ EOF while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do case "$arg" in s) - server=$(dig +short $OPTARG) + command -v dig > /dev/null && + server=$(dig +short $OPTARG) || + if [[ $OPTARG =~ $REGEX ]] + then + loger 3 "Hostname detected for server but no dig present to resolve!" + exit 1 + else + server=$OPTARG + fi ;; l) local_port=$OPTARG ;; S) - SERVER=$(dig +short $OPTARG) + command -v dig > /dev/null && + SERVER=$(dig +short $OPTARG) || + if [[ $OPTARG =~ $REGEX ]] + then + loger 3 "Hostname detected for UDP server but no dig present to resolve!" + exit 1 + else + SERVER=$OPTARG + fi ;; L) LOCAL_PORT=$OPTARG From d05970fd0c3647128fdc6146deecf91e7ffc2eb1 Mon Sep 17 00:00:00 2001 From: Ptomerty Date: Thu, 29 Nov 2018 23:13:06 -0500 Subject: [PATCH 3/3] Use existing IP regex --- src/ss-nat | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ss-nat b/src/ss-nat index 10b06fa8..f4b1ebdb 100755 --- a/src/ss-nat +++ b/src/ss-nat @@ -10,7 +10,7 @@ TAG="SS_SPEC" # iptables tag IPT="iptables -t nat" # alias of iptables FWI=$(uci get firewall.shadowsocks.path 2>/dev/null) # firewall include file -REGEX="[^0-9.]" # used to check if hostnames have letters +IP_REGEX="^([0-9]{1,3}\.){3}[0-9]{1,3}" # used to check if input is a valid IP usage() { cat <<-EOF @@ -127,7 +127,7 @@ tp_rule() { } get_wan_ip() { - cat <<-EOF | grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}" + cat <<-EOF | grep -E $IP_REGEX $server $SERVER $WAN_BP_IP @@ -173,7 +173,7 @@ while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do s) command -v dig > /dev/null && server=$(dig +short $OPTARG) || - if [[ $OPTARG =~ $REGEX ]] + if ! [[ $OPTARG =~ $IP_REGEX ]] then loger 3 "Hostname detected for server but no dig present to resolve!" exit 1 @@ -187,7 +187,7 @@ while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do S) command -v dig > /dev/null && SERVER=$(dig +short $OPTARG) || - if [[ $OPTARG =~ $REGEX ]] + if ! [[ $OPTARG =~ $IP_REGEX ]] then loger 3 "Hostname detected for UDP server but no dig present to resolve!" exit 1