Skip to content

Instantly share code, notes, and snippets.

@sarkrui
Last active November 6, 2023 07:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sarkrui/050a5ed1daac8feb0a6ef3149e9b0ffa to your computer and use it in GitHub Desktop.
Save sarkrui/050a5ed1daac8feb0a6ef3149e9b0ffa to your computer and use it in GitHub Desktop.
proxy list for dnsmasq sniproxy
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'
[[ $EUID -ne 0 ]] && echo -e "[${red}Error${plain}] 请使用root用户来执行脚本!" && exit 1
disable_selinux(){
if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
fi
}
check_sys(){
local checkType=$1
local value=$2
local release=''
local systemPackage=''
if [[ -f /etc/redhat-release ]]; then
release="centos"
systemPackage="yum"
elif grep -Eqi "debian|raspbian" /etc/issue; then
release="debian"
systemPackage="apt"
elif grep -Eqi "ubuntu" /etc/issue; then
release="ubuntu"
systemPackage="apt"
elif grep -Eqi "centos|red hat|redhat" /etc/issue; then
release="centos"
systemPackage="yum"
elif grep -Eqi "debian|raspbian" /proc/version; then
release="debian"
systemPackage="apt"
elif grep -Eqi "ubuntu" /proc/version; then
release="ubuntu"
systemPackage="apt"
elif grep -Eqi "centos|red hat|redhat" /proc/version; then
release="centos"
systemPackage="yum"
fi
if [[ "${checkType}" == "sysRelease" ]]; then
if [ "${value}" == "${release}" ]; then
return 0
else
return 1
fi
elif [[ "${checkType}" == "packageManager" ]]; then
if [ "${value}" == "${systemPackage}" ]; then
return 0
else
return 1
fi
fi
}
getversion(){
if [[ -s /etc/redhat-release ]]; then
grep -oE "[0-9.]+" /etc/redhat-release
else
grep -oE "[0-9.]+" /etc/issue
fi
}
centosversion(){
if check_sys sysRelease centos; then
local code=$1
local version="$(getversion)"
local main_ver=${version%%.*}
if [ "$main_ver" == "$code" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
get_ip(){
local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
echo ${IP}
}
check_ip(){
local checkip=$1
local valid_check=$(echo $checkip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $checkip|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
if [ ${valid_check:-no} == "yes" ]; then
return 0
else
echo -e "[${red}Error${plain}] IP $checkip not available!"
return 1
fi
else
echo -e "[${red}Error${plain}] IP format error!"
return 1
fi
}
download(){
local filename=${1}
echo -e "[${green}Info${plain}] ${filename} download configuration now..."
wget --no-check-certificate -q -t3 -T60 -O ${1} ${2}
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Download ${filename} failed."
exit 1
fi
}
error_detect_depends(){
local command=$1
local depend=`echo "${command}" | awk '{print $4}'`
echo -e "[${green}Info${plain}] Starting to install package ${depend}"
${command} > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to install ${red}${depend}${plain}"
exit 1
fi
}
config_firewall(){
if centosversion 6; then
/etc/init.d/iptables status > /dev/null 2>&1
if [ $? -eq 0 ]; then
for port in ${ports}; do
iptables -L -n | grep -i ${port} > /dev/null 2>&1
if [ $? -ne 0 ]; then
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT
if [ ${port} == "53" ]; then
iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT
fi
else
echo -e "[${green}Info${plain}] port ${green}${port}${plain} already be enabled."
fi
done
/etc/init.d/iptables save
/etc/init.d/iptables restart
else
echo -e "[${yellow}Warning${plain}] iptables looks like not running or not installed, please enable port ${ports} manually if necessary."
fi
elif centosversion 7 || centosversion 8; then
systemctl status firewalld > /dev/null 2>&1
if [ $? -eq 0 ]; then
default_zone=$(firewall-cmd --get-default-zone)
for port in ${ports}; do
firewall-cmd --permanent --zone=${default_zone} --add-port=${port}/tcp
if [ ${port} == "53" ]; then
firewall-cmd --permanent --zone=${default_zone} --add-port=${port}/udp
fi
firewall-cmd --reload
done
else
echo -e "[${yellow}Warning${plain}] firewalld looks like not running or not installed, please enable port ${ports} manually if necessary."
fi
fi
}
install_dependencies(){
echo "安装依赖软件..."
if check_sys packageManager yum; then
echo -e "[${green}Info${plain}] Checking the EPEL repository..."
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
yum install -y epel-release > /dev/null 2>&1
fi
[ ! -f /etc/yum.repos.d/epel.repo ] && echo -e "[${red}Error${plain}] Install EPEL repository failed, please check it." && exit 1
[ ! "$(command -v yum-config-manager)" ] && yum install -y yum-utils > /dev/null 2>&1
[ x"$(yum-config-manager epel | grep -w enabled | awk '{print $3}')" != x"True" ] && yum-config-manager --enable epel > /dev/null 2>&1
echo -e "[${green}Info${plain}] Checking the EPEL repository complete..."
if [[ ${fastmode} = "1" ]]; then
yum_depends=(
curl gettext-devel libev-devel pcre-devel perl udns-devel
)
else
yum_depends=(
git autoconf automake curl gettext-devel libev-devel pcre-devel perl pkgconfig rpm-build udns-devel
)
fi
for depend in ${yum_depends[@]}; do
error_detect_depends "yum -y install ${depend}"
done
if [[ ${fastmode} = "0" ]]; then
if centosversion 6; then
error_detect_depends "yum -y groupinstall development"
error_detect_depends "yum -y install centos-release-scl"
error_detect_depends "yum -y install devtoolset-6-gcc-c++"
elif centosversion 7 || centosversion 8; then
yum groups list development | grep Installed > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
yum groups mark remove development -y > /dev/null 2>&1
fi
error_detect_depends "yum -y groupinstall development"
fi
fi
elif check_sys packageManager apt; then
if [[ ${fastmode} = "1" ]]; then
apt_depends=(
curl gettext libev-dev libpcre3-dev libudns-dev
)
else
apt_depends=(
git autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext libev-dev libpcre3-dev libudns-dev pkg-config fakeroot devscripts
)
fi
apt-get -y update
for depend in ${apt_depends[@]}; do
error_detect_depends "apt-get -y install ${depend}"
done
if [[ ${fastmode} = "0" ]]; then
error_detect_depends "apt-get -y install build-essential"
fi
fi
}
compile_dnsmasq(){
if check_sys packageManager yum; then
error_detect_depends "yum -y install epel-release"
error_detect_depends "yum -y install make"
error_detect_depends "yum -y install gcc-c++"
error_detect_depends "yum -y install nettle-devel"
error_detect_depends "yum -y install gettext"
error_detect_depends "yum -y install libidn-devel"
#error_detect_depends "yum -y install libidn2-devel"
error_detect_depends "yum -y install libnetfilter_conntrack-devel"
error_detect_depends "yum -y install dbus-devel"
elif check_sys packageManager apt; then
error_detect_depends "apt -y install make"
error_detect_depends "apt -y install gcc"
error_detect_depends "apt -y install g++"
error_detect_depends "apt -y install pkg-config"
error_detect_depends "apt -y install nettle-dev"
error_detect_depends "apt -y install gettext"
error_detect_depends "apt -y install libidn11-dev"
#error_detect_depends "apt -y install libidn2-dev"
error_detect_depends "apt -y install libnetfilter-conntrack-dev"
error_detect_depends "apt -y install libdbus-1-dev"
fi
if [ -e /tmp/dnsmasq-2.89 ]; then
rm -rf /tmp/dnsmasq-2.89
fi
cd /tmp/
download dnsmasq-2.89.tar.gz https://thekelleys.org.uk/dnsmasq/dnsmasq-2.89.tar.gz
tar -zxf dnsmasq-2.89.tar.gz
cd dnsmasq-2.89
make all-i18n V=s COPTS='-DHAVE_DNSSEC -DHAVE_IDN -DHAVE_CONNTRACK -DHAVE_DBUS'
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] dnsmasq upgrade failed."
rm -rf /tmp/dnsmasq-2.89 /tmp/dnsmasq-2.89.tar.gz
exit 1
fi
}
install_dnsmasq(){
netstat -a -n -p | grep LISTEN | grep -P "\d+\.\d+\.\d+\.\d+:53\s+" > /dev/null && echo -e "[${red}Error${plain}] required port 53 already in use\n" && exit 1
echo "安装Dnsmasq..."
if check_sys packageManager yum; then
error_detect_depends "yum -y install dnsmasq"
if centosversion 6; then
compile_dnsmasq
yes|cp -f /tmp/dnsmasq-2.89/src/dnsmasq /usr/sbin/dnsmasq && chmod +x /usr/sbin/dnsmasq
fi
elif check_sys packageManager apt; then
error_detect_depends "apt -y install dnsmasq"
fi
if [[ ${fastmode} = "0" ]]; then
compile_dnsmasq
yes|cp -f /tmp/dnsmasq-2.89/src/dnsmasq /usr/sbin/dnsmasq && chmod +x /usr/sbin/dnsmasq
fi
[ ! -f /usr/sbin/dnsmasq ] && echo -e "[${red}Error${plain}] 安装dnsmasq出现问题,请检查." && exit 1
download /etc/dnsmasq.d/custom_netflix.conf https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/dnsmasq.conf
download /tmp/proxy-domains.txt https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/proxy-domains.txt
for domain in $(cat /tmp/proxy-domains.txt); do
printf "address=/${domain}/${publicip}\n"\
| tee -a /etc/dnsmasq.d/custom_netflix.conf > /dev/null 2>&1
done
[ "$(grep -x -E "(conf-dir=/etc/dnsmasq.d|conf-dir=/etc/dnsmasq.d,.bak|conf-dir=/etc/dnsmasq.d/,\*.conf|conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig)" /etc/dnsmasq.conf)" ] || echo -e "\nconf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.conf
echo "启动 Dnsmasq 服务..."
if check_sys packageManager yum; then
if centosversion 6; then
chkconfig dnsmasq on
service dnsmasq start
elif centosversion 7 || centosversion 8; then
systemctl enable dnsmasq
systemctl start dnsmasq
fi
elif check_sys packageManager apt; then
systemctl enable dnsmasq
systemctl restart dnsmasq
fi
cd /tmp
rm -rf /tmp/dnsmasq-2.89 /tmp/dnsmasq-2.89.tar.gz /tmp/proxy-domains.txt
echo -e "[${green}Info${plain}] dnsmasq install complete..."
}
install_sniproxy(){
for aport in 80 443; do
netstat -a -n -p | grep LISTEN | grep -P "\d+\.\d+\.\d+\.\d+:${aport}\s+" > /dev/null && echo -e "[${red}Error${plain}] required port ${aport} already in use\n" && exit 1
done
install_dependencies
echo "安装SNI Proxy..."
if check_sys packageManager yum; then
rpm -qa | grep sniproxy >/dev/null 2>&1
if [ $? -eq 0 ]; then
rpm -e sniproxy
fi
elif check_sys packageManager apt; then
dpkg -s sniproxy >/dev/null 2>&1
if [ $? -eq 0 ]; then
dpkg -r sniproxy
fi
fi
bit=`uname -m`
cd /tmp
if [[ ${fastmode} = "0" ]]; then
if [ -e sniproxy ]; then
rm -rf sniproxy
fi
git clone https://github.com/dlundquist/sniproxy.git
cd sniproxy
fi
if check_sys packageManager yum; then
if [[ ${fastmode} = "1" ]]; then
if [[ ${bit} = "x86_64" ]]; then
download /tmp/sniproxy-0.6.1-1.el8.x86_64.rpm https://github.com/myxuchangbin/dnsmasq_sniproxy_install/raw/master/sniproxy/sniproxy-0.6.1-1.el8.x86_64.rpm
error_detect_depends "yum -y install /tmp/sniproxy-0.6.1-1.el8.x86_64.rpm"
rm -rf /tmp/sniproxy-0.6.1-1.el8.x86_64.rpm
else
echo -e "${red}暂不支持${bit}内核,请使用编译模式安装!${plain}" && exit 1
fi
else
./autogen.sh && ./configure && make dist
if centosversion 6; then
scl enable devtoolset-6 'rpmbuild --define "_sourcedir `pwd`" --define "_topdir /tmp/sniproxy/rpmbuild" --define "debug_package %{nil}" -ba redhat/sniproxy.spec'
download /etc/init.d/sniproxy https://raw.githubusercontent.com/dlundquist/sniproxy/master/redhat/sniproxy.init && chmod +x /etc/init.d/sniproxy
elif centosversion 7 || centosversion 8; then
sed -i "s/\%configure CFLAGS\=\"-I\/usr\/include\/libev\"/\%configure CFLAGS\=\"-fPIC -I\/usr\/include\/libev\"/" redhat/sniproxy.spec
rpmbuild --define "_sourcedir `pwd`" --define "_topdir /tmp/sniproxy/rpmbuild" --define "debug_package %{nil}" -ba redhat/sniproxy.spec
fi
error_detect_depends "yum -y install /tmp/sniproxy/rpmbuild/RPMS/x86_64/sniproxy-*.rpm"
fi
if centosversion 6; then
download /etc/init.d/sniproxy https://raw.githubusercontent.com/dlundquist/sniproxy/master/redhat/sniproxy.init && chmod +x /etc/init.d/sniproxy
[ ! -f /etc/init.d/sniproxy ] && echo -e "[${red}Error${plain}] 下载Sniproxy启动文件出现问题,请检查." && exit 1
elif centosversion 7 || centosversion 8; then
download /etc/systemd/system/sniproxy.service https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/sniproxy.service
systemctl daemon-reload
[ ! -f /etc/systemd/system/sniproxy.service ] && echo -e "[${red}Error${plain}] 下载Sniproxy启动文件出现问题,请检查." && exit 1
fi
elif check_sys packageManager apt; then
if [[ ${fastmode} = "1" ]]; then
if [[ ${bit} = "x86_64" ]]; then
download /tmp/sniproxy_0.6.1_amd64.deb https://github.com/myxuchangbin/dnsmasq_sniproxy_install/raw/master/sniproxy/sniproxy_0.6.1_amd64.deb
error_detect_depends "dpkg -i --no-debsig /tmp/sniproxy_0.6.1_amd64.deb"
rm -rf /tmp/sniproxy_0.6.1_amd64.deb
else
echo -e "${red}暂不支持${bit}内核,请使用编译模式安装!${plain}" && exit 1
fi
else
./autogen.sh && dpkg-buildpackage
error_detect_depends "dpkg -i --no-debsig ../sniproxy_*.deb"
rm -rf /tmp/sniproxy*.deb
fi
download /etc/systemd/system/sniproxy.service https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/sniproxy.service
systemctl daemon-reload
[ ! -f /etc/systemd/system/sniproxy.service ] && echo -e "[${red}Error${plain}] 下载Sniproxy启动文件出现问题,请检查." && exit 1
fi
[ ! -f /usr/sbin/sniproxy ] && echo -e "[${red}Error${plain}] 安装Sniproxy出现问题,请检查." && exit 1
download /etc/sniproxy.conf https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/sniproxy.conf
download /tmp/sniproxy-domains.txt https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/proxy-domains.txt
sed -i -e 's/\./\\\./g' -e 's/^/ \.\*/' -e 's/$/\$ \*/' /tmp/sniproxy-domains.txt || (echo -e "[${red}Error:${plain}] Failed to configuration sniproxy." && exit 1)
sed -i '/table {/r /tmp/sniproxy-domains.txt' /etc/sniproxy.conf || (echo -e "[${red}Error:${plain}] Failed to configuration sniproxy." && exit 1)
if [ ! -e /var/log/sniproxy ]; then
mkdir /var/log/sniproxy
fi
echo "启动 SNI Proxy 服务..."
if check_sys packageManager yum; then
if centosversion 6; then
chkconfig sniproxy on > /dev/null 2>&1
service sniproxy start || (echo -e "[${red}Error:${plain}] Failed to start sniproxy." && exit 1)
elif centosversion 7 || centosversion 8; then
systemctl enable sniproxy > /dev/null 2>&1
systemctl start sniproxy || (echo -e "[${red}Error:${plain}] Failed to start sniproxy." && exit 1)
fi
elif check_sys packageManager apt; then
systemctl enable sniproxy > /dev/null 2>&1
systemctl restart sniproxy || (echo -e "[${red}Error:${plain}] Failed to start sniproxy." && exit 1)
fi
cd /tmp
rm -rf /tmp/sniproxy/
rm -rf /tmp/sniproxy-domains.txt
echo -e "[${green}Info${plain}] sniproxy install complete..."
}
install_check(){
if check_sys packageManager yum || check_sys packageManager apt; then
if centosversion 5; then
return 1
fi
return 0
else
return 1
fi
}
ready_install(){
echo "检测您的系统..."
if ! install_check; then
echo -e "[${red}Error${plain}] Your OS is not supported to run it!"
echo -e "Please change to CentOS 6+/Debian 8+/Ubuntu 16+ and try again."
exit 1
fi
if check_sys packageManager yum; then
yum makecache
error_detect_depends "yum -y install net-tools"
error_detect_depends "yum -y install wget"
elif check_sys packageManager apt; then
apt update
error_detect_depends "apt-get -y install net-tools"
error_detect_depends "apt-get -y install wget"
fi
disable_selinux
if check_sys packageManager yum; then
config_firewall
fi
echo -e "[${green}Info${plain}] Checking the system complete..."
}
hello(){
echo ""
echo -e "${yellow}Dnsmasq + SNI Proxy自助安装脚本${plain}"
echo -e "${yellow}支持系统: CentOS 6+, Debian8+, Ubuntu16+${plain}"
echo ""
}
help(){
hello
echo "使用方法:bash $0 [-h] [-i] [-f] [-id] [-fd] [-is] [-fs] [-u] [-ud] [-us]"
echo ""
echo " -h , --help 显示帮助信息"
echo " -i , --install 安装 Dnsmasq + SNI Proxy"
echo " -f , --fastinstall 快速安装 Dnsmasq + SNI Proxy"
echo " -id, --installdnsmasq 仅安装 Dnsmasq"
echo " -id, --installdnsmasq 快速安装 Dnsmasq"
echo " -is, --installsniproxy 仅安装 SNI Proxy"
echo " -fs, --fastinstallsniproxy 快速安装 SNI Proxy"
echo " -u , --uninstall 卸载 Dnsmasq + SNI Proxy"
echo " -ud, --undnsmasq 卸载 Dnsmasq"
echo " -us, --unsniproxy 卸载 SNI Proxy"
echo " -uc, --updateconfig 更新代理配置文件"
echo ""
}
install_all(){
ports="53 80 443"
publicip=$(get_ip)
hello
ready_install
install_dnsmasq
install_sniproxy
echo ""
echo -e "${yellow}Dnsmasq + SNI Proxy 已完成安装!${plain}"
echo ""
echo -e "${yellow}将您的DNS更改为 $(get_ip) 即可以观看Netflix节目了。${plain}"
echo ""
}
only_dnsmasq(){
ports="53"
hello
ready_install
inputipcount=1
echo -e "请输入SNIProxy服务器的IP地址"
read -e -p "(为空则自动获取公网IP): " inputip
while true; do
if [ "${inputipcount}" == 3 ]; then
echo -e "[${red}Error:${plain}] IP输入错误次数过多,请重新执行脚本。"
exit 1
fi
if [ -z ${inputip} ]; then
publicip=$(get_ip)
break
else
check_ip ${inputip}
if [ $? -eq 0 ]; then
publicip=${inputip}
break
else
echo -e "请重新输入SNIProxy服务器的IP地址"
read -e -p "(为空则自动获取公网IP): " inputip
fi
fi
inputipcount=`expr ${inputipcount} + 1`
done
install_dnsmasq
echo ""
echo -e "${yellow}Dnsmasq 已完成安装!${plain}"
echo ""
echo -e "${yellow}将您的DNS更改为 $(get_ip) 即可以观看Netflix节目了。${plain}"
echo ""
}
only_sniproxy(){
ports="80 443"
hello
ready_install
install_sniproxy
echo ""
echo -e "${yellow}SNI Proxy 已完成安装!${plain}"
echo ""
echo -e "${yellow}将Netflix的相关域名解析到 $(get_ip) 即可以观看Netflix节目了。${plain}"
echo ""
}
undnsmasq(){
echo -e "[${green}Info${plain}] Stoping dnsmasq services."
if check_sys packageManager yum; then
if centosversion 6; then
chkconfig dnsmasq off > /dev/null 2>&1
service dnsmasq stop || echo -e "[${red}Error:${plain}] Failed to stop dnsmasq."
elif centosversion 7 || centosversion 8; then
systemctl disable dnsmasq > /dev/null 2>&1
systemctl stop dnsmasq || echo -e "[${red}Error:${plain}] Failed to stop dnsmasq."
fi
elif check_sys packageManager apt; then
systemctl disable dnsmasq > /dev/null 2>&1
systemctl stop dnsmasq || echo -e "[${red}Error:${plain}] Failed to stop dnsmasq."
fi
echo -e "[${green}Info${plain}] Starting to uninstall dnsmasq services."
if check_sys packageManager yum; then
yum remove dnsmasq -y > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to uninstall ${red}dnsmasq${plain}"
fi
elif check_sys packageManager apt; then
apt-get remove dnsmasq -y > /dev/null 2>&1
apt-get remove dnsmasq-base -y > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to uninstall ${red}dnsmasq${plain}"
fi
fi
rm -rf /etc/dnsmasq.d/custom_netflix.conf
echo -e "[${green}Info${plain}] services uninstall dnsmasq complete..."
}
unsniproxy(){
echo -e "[${green}Info${plain}] Stoping sniproxy services."
if check_sys packageManager yum; then
if centosversion 6; then
chkconfig sniproxy off > /dev/null 2>&1
service sniproxy stop || echo -e "[${red}Error:${plain}] Failed to stop sniproxy."
elif centosversion 7 || centosversion 8; then
systemctl disable sniproxy > /dev/null 2>&1
systemctl stop sniproxy || echo -e "[${red}Error:${plain}] Failed to stop sniproxy."
fi
elif check_sys packageManager apt; then
systemctl disable sniproxy > /dev/null 2>&1
systemctl stop sniproxy || echo -e "[${red}Error:${plain}] Failed to stop sniproxy."
fi
echo -e "[${green}Info${plain}] Starting to uninstall sniproxy services."
if check_sys packageManager yum; then
yum remove sniproxy -y > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to uninstall ${red}sniproxy${plain}"
fi
elif check_sys packageManager apt; then
apt-get remove sniproxy -y > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to uninstall ${red}sniproxy${plain}"
fi
fi
rm -rf /etc/sniproxy.conf
echo -e "[${green}Info${plain}] services uninstall sniproxy complete..."
}
updateconfig(){
NEW_DOMAINS_FILE_URL="https://gist.githubusercontent.com/sarkrui/050a5ed1daac8feb0a6ef3149e9b0ffa/raw/proxy-domains.txt"
curl -o /etc/sniproxy.conf https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/sniproxy.conf
curl -o /tmp/sniproxy-domains.txt $NEW_DOMAINS_FILE_URL
sed -i -e 's/\./\\\./g' -e 's/^/ \.\*/' -e 's/$/\$ \*/' /tmp/sniproxy-domains.txt || { echo -e "[Error] Failed to configuration sniproxy." && exit 1; }
sed -i '/table {/r /tmp/sniproxy-domains.txt' /etc/sniproxy.conf || { echo -e "[Error] Failed to configuration sniproxy." && exit 1; }
}
confirm(){
echo -e "${yellow}是否继续执行?(n:取消/y:继续)${plain}"
read -e -p "(默认:取消): " selection
[ -z "${selection}" ] && selection="n"
if [ ${selection} != "y" ]; then
exit 0
fi
}
if [[ $# = 1 ]];then
key="$1"
case $key in
-i|--install)
fastmode=0
install_all
;;
-f|--fastinstall)
fastmode=1
install_all
;;
-id|--installdnsmasq)
fastmode=0
only_dnsmasq
;;
-fd|--fastinstalldnsmasq)
fastmode=1
only_dnsmasq
;;
-is|--installsniproxy)
fastmode=0
only_sniproxy
;;
-fs|--fastinstallsniproxy)
fastmode=1
only_sniproxy
;;
-u|--uninstall)
hello
echo -e "${yellow}正在执行卸载Dnsmasq和SNI Proxy.${plain}"
confirm
undnsmasq
unsniproxy
;;
-ud|--undnsmasq)
hello
echo -e "${yellow}正在执行卸载Dnsmasq.${plain}"
confirm
undnsmasq
;;
-us|--unsniproxy)
hello
echo -e "${yellow}正在执行卸载SNI Proxy.${plain}"
confirm
unsniproxy
;;
-uc|--updateconfig)
hello
echo -e "${yellow}正在更新代理域名配置.${plain}"
confirm
updateconfig
;;
-h|--help|*)
help
;;
esac
else
help
fi
akadns.net
akam.net
akamai.com
akamai.net
akamaiedge.net
akamaihd.net
akamaistream.net
akamaitech.net
akamaitechnologies.com
akamaitechnologies.fr
akamaized.net
edgekey.net
edgesuite.net
srip.net
footprint.net
level3.net
llnwd.net
edgecastcdn.net
cloudfront.net
netflix.com
netflix.net
nflximg.com
nflximg.net
nflxvideo.net
nflxso.net
nflxext.com
hulu.com
huluim.com
hbonow.com
hbogo.com
hbo.com
amazon.com
amazon.co.uk
amazonvideo.com
crackle.com
pandora.com
vudu.com
blinkbox.com
abc.com
fox.com
theplatform.com
nbc.com
nbcuni.com
ip2location.com
pbs.org
warnerbros.com
southpark.cc.com
cbs.com
brightcove.com
cwtv.com
spike.com
go.com
mtv.com
mtvnservices.com
playstation.net
uplynk.com
maxmind.com
disney.com
disneyjunior.com
adobedtm.com
bam.nr-data.net
bamgrid.com
braze.com
cdn.optimizely.com
cdn.registerdisney.go.com
cws.conviva.com
d9.flashtalking.com
disney-plus.net
disney-portal.my.onetrust.com
disney.demdex.net
disney.my.sentry.io
disneyplus.bn5x.net
disneyplus.com
disneyplus.com.ssl.sc.omtrdc.net
disneystreaming.com
dssott.com
execute-api.us-east-1.amazonaws.com
js-agent.newrelic.com
xboxlive.com
lovefilm.com
turner.com
amctv.com
sho.com
mog.com
wdtvlive.com
beinsportsconnect.tv
beinsportsconnect.net
fig.bbc.co.uk
open.live.bbc.co.uk
sa.bbc.co.uk
www.bbc.co.uk
crunchyroll.com
ifconfig.co
omtrdc.net
sling.com
movetv.com
happyon.jp
abema.tv
hulu.jp
optus.com.au
optusnet.com.au
gamer.com.tw
bahamut.com.tw
hinet.net
dmm.com
dmm.co.jp
dmm-extension.com
dmmapis.com
api-p.videomarket.jp
saima.zlzd.xyz
challenges.cloudflare.com
ai.com
openai.com
cdn.oaistatic.com
aiv-cdn.net
aiv-delivery.net
amazonprimevideo.cn
amazonprimevideo.com.cn
amazonprimevideos.com
amazonvideo.cc
media-amazon.com
prime-video.com
primevideo.cc
primevideo.com
primevideo.info
primevideo.org
primevideo.tv
pv-cdn.net
awsstatic.com
amazonaws.com
fast.com
netflix.ca
nflxsearch.net
netflixdnstest1.com
netflixdnstest2.com
netflixdnstest3.com
netflixdnstest4.com
netflixdnstest5.com
netflixdnstest6.com
netflixdnstest7.com
netflixdnstest8.com
netflixdnstest9.com
netflixdnstest10.com
netflixinvestor.com
netflixtechblog.com
disney.asia
disney.be
disney.bg
disney.ca
disney.ch
disney.co.il
disney.co.jp
disney.co.kr
disney.co.th
disney.co.uk
disney.co.za
disney.com.au
disney.com.br
disney.com.hk
disney.com.tw
disney.cz
disney.de
disney.dk
disney.es
disney.fi
disney.fr
disney.gr
disney.hu
disney.id
disney.in
disney.io
disney.it
disney.my
disney.nl
disney.no
disney.ph
disney.pl
disney.pt
disney.ro
disney.ru
disney.se
disney.sg
20thcenturystudios.com.au
20thcenturystudios.com.br
20thcenturystudios.jp
adventuresbydisney.com
babble.com
babyzone.com
beautyandthebeastmusical.co.uk
dilcdn.com
disney-asia.com
disney-discount.com
disney-studio.com
disney-studio.net
disneyadsales.com
disneyarena.com
disneyaulani.com
disneybaby.com
disneycareers.com
disneychannelonstage.com
disneychannelroadtrip.com
disneycruisebrasil.com
disneyenconcert.com
disneyiejobs.com
disneyinflight.com
disneyinternational.com
disneyinternationalhd.com
disneyjuniortreataday.com
disneylatino.com
disneymagicmoments.co.il
disneymagicmoments.co.uk
disneymagicmoments.co.za
disneymagicmoments.de
disneymagicmoments.es
disneymagicmoments.fr
disneymagicmoments.gen.tr
disneymagicmoments.gr
disneymagicmoments.it
disneymagicmoments.pl
disneymagicmomentsme.com
disneyme.com
disneymeetingsandevents.com
disneymovieinsiders.com
disneymusicpromotion.com
disneynewseries.com
disneynow.com
disneypeoplesurveys.com
disneyredirects.com
disneysrivieraresort.com
disneystore.com
disneysubscription.com
disneytickets.co.uk
disneyturkiye.com.tr
disneytvajobs.com
disneyworld-go.com
go-disneyworldgo.com
mickey.tv
moviesanywhere.com
nomadlandmovie.ch
playmation.com
shopdisney.com
shops-disney.com
sorcerersarena.com
spaindisney.com
star-brasil.com
star-latam.com
starwars.com
starwarsgalacticstarcruiser.com
starwarskids.com
streamingdisney.net
thestationbymaker.com
thisispolaris.com
watchdisneyfe.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment