====== ShadowVpn ======
ShadowVPN 是一个基于 libsodium 的高速、安全的 VPN。特别为低端硬件,如 OpenWRT 路由器设计。
https://shadowvpn.org/ https://github.com/clowwindy/ShadowVPN
==== 优势 ====
无状态VPN,低负载低资源占用,适合安装在OpenWRT上,在没有限制UDP包数量的网络环境上速度飞快(例如校园网),在联通/移动线路上速度快于[[shadowsocks|ShadowSocks]]。电信就不要想了,用什么都是这么慢。
===== 安装 =====
==== 编译 ====
sudo apt-get install build-essential automake libtool
git clone https://github.com/clowwindy/ShadowVPN.git
git submodule update --init
./autogen.sh
./configure --enable-static --sysconfdir=/etc
make && sudo make install
==== 编译为deb包 ====
sudo apt-get install build-essential automake libtool gawk debhelper
git clone https://github.com/clowwindy/ShadowVPN.git
git submodule update --init
./autogen.sh
dpkg-buildpackage
sudo dpkg -i ../shadowvpn_xxx.deb
==== 添加第三方源 ====
在''Debian 7''和''Ubuntu 12+''可以添加下一行到''/etc/apt/sources.list''
deb http://shadowvpn.org/debian wheezy main
然后安装deb包即可:
sudo apt-get update
sudo apt-get install shadowvpn
sudo service shadowvpn restart
===== 路由表 =====
VPN是全局的,在访问国内网站时速度不佳,而且会暴露自己代理服务器IP,所以有必要配置路由表绕过国内网站。
这里采用''chnroutes'' + ''ipset''白名单的方式实现绕过国内网站。其中''chnroutes''可绕过所有国内的IP,''ipset''作为补充方案,指定你不想经过VPN访问的网站。
==== 生成chnroutes ====
获取''chnroute.txt'':
curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt
使用下面的''gen_chnroutes.sh''生成''chnroutes.sh''
#!/bin/sh
path=$(dirname $0)
list=$(grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}" $path/chnroute.txt |\
sed -e "s/^/route \$action /" -e "s/$/ \$suf/")
cat <<-EOH > $path/chnroutes.sh
#!/bin/sh
if [ "\$1" = "down" -o "\$1" = "del" ]; then
action=del
else
action=add
suf="via \$(ip route show 0/0 | grep via | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')"
fi
ip -batch - <
==== 配置ipset ====
使用下面脚本设置ipset
#!/bin/bash
if [ "$1" = "down" -o "$1" = "del" ]; then
ip rule del table cndirect
ipset destroy whitelist
iptables -t mangle -D fwmark -m set --match-set whitelist dst -j MARK --set-mark 0xffff
iptables -t mangle -F PREROUTING
iptables -t mangle -X fwmark
exit
fi
suf="via $(ip route show 0/0 | grep via | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')"
# restore ipset conf
#ipset restore /etc/ipset.conf
[ $(ipset list whitelist 2>/dev/null| wc -l) -eq 0 ] && { ipset -N whitelist iphash; }
iptables -t mangle -N fwmark
iptables -t mangle -A PREROUTING -j fwmark
# optional
#iptables -t mangle -A OUTPUT -j fwmark
iptables -t mangle -A fwmark -m set --match-set whitelist dst -j MARK --set-mark 0xffff
# echo "99 cndirect" >> /etc/iproute2/rt_tables
ip rule add fwmark 0xffff table cndirect
ip route add default dev enp8s0 table cndirect
==== 配置dnsmasq ====
''dnsmasq''的''ipset''配置格式如下:
ipset=/.douban.com/whitelist