Home

Awesome

Aufow -- Autoddvpn for OpenWrt

此工程主要贡献来自于autoddvpnopenwrt-smarthosts-autoddvpn。主要在OpenWrt路由上实现autoddvpn的效果。

本来已经在ddwrt路由上搭好audoddvpn,在这里可以找到一些常用的脚本。不过最近从ddwrt转移到OpenWrt上,因为发现OpenWrt更加灵活,可玩度更高一些。此工程是在audoddwrt现有的代码及脚本基础上移植并应用在OpenWrt+Openvpn上的。

效果

实现无痛翻墙并支持翻墙网站及ip的定期自动更新。

条件

本方案在以下条件下测试通过:

openwrt-smarthosts-autoddvpn就是基于OpenWrt+PPTP的,

效果

GFW的手段主要手段及解决办法:

生成routes

openvpn启动后会运行vpnup.sh脚本来加载需要通过vpn访问的ip,关闭时通过vpndown.sh来从路由表中移除这些ip。

vpnup.sh会用到以下4个文件,确保这几个文件在vpnup.sh脚本所定义的PWD目录下。

静态路由

dnsmasq配置文件

以下文件在要放在/etc/dnsmasq.d文件夹当中,具体见下文。

以上4个文件中,basic_routes固定不变,其他3个可以通过以下方法生成:

要有dnspython支持,安装运行:sudo pip install dnspython

dnsmasq

把那些被污染的网址,通过Google DNS查询出真实的ip地址,并把这些ip地址放入dnsmasq的配置中。

在dnsmasq配置文件/etc/dnsmasq.conf中添加以下代码:

conf-dir=/etc/dnsmasq.d

如果此目录不存在的话,新建一个:

mkdir /etc/dnsmasq.d

autoddvpn.confgfwdomains放入此文件夹,并重启dnsmasq:

/etc/init.d/dnsmasq restart

此时你查询返回的就应该是正确的ip地址了lol

DNS设置

网络设置中,打开LAN接口设置,可以在使用自定义DNS服务器中填入以下:

199.91.73.222
8.8.8.8

分别是V2EX和Google的DNS服务器

openvpn

注意:操作前确保你有足够的空间,一般8M的Flash都足够了,4M的可能就不够,可以插个USB上去

主要安装参考openwrt官网

安装

opkg update
opkg install openvpn

新建一个文件夹并把所有与openvpn有关的文件都放在这个目录下

mkdir /mnt/etc/openvpn

注意:也可以在在其他位置,不过与此有关的路径都要做相应的修改

/etc/config/network为openvpn加一个接口

config interface 'vpn'
	    option ifname 'tun0'
    	option defaultroute '0'
    	option peerdns '0'
    	option proto 'none'

openvpn的配置在/mnt/etc/openvpn/openvpn.conf,具体参考autoddvpn。注意vpnup.shvpndown.sh以及那些key的路径。

vi /etc/config/openvpn

package openvpn
config openvpn vpn
    option client 1
    option enabled 1
    option config /mnt/etc/openvpn/openvpn.conf

启动

/etc/init.d/openvpn start

开机启动

/etc/init.d/openvpn enable

配置防火墙

注意:以下的端口与协议要跟你openvpn配置里的一致,以下用的是openvpn的默认配置:udp协议及1194端口。

vi /etc/config/firewall

## 增加以下内容
config 'include'
    option 'path' '/etc/firewall.user'

config 'rule'
    option 'target' 'ACCEPT'
    option 'name' 'VPN'
    option 'src' 'wan'
    option 'proto' 'udp'
    option 'dest_port' '1194'

## 自定义防火墙内容
vi /etc/firewall.user

## 增加以下内容
iptables -t nat -A prerouting_wan -p udp --dport 1194 -j ACCEPT
iptables -A input_wan -p udp --dport 1194 -j ACCEPT

iptables -I INPUT -i tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -j ACCEPT
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT

## 重启firewall
/etc/init.d/firewall restart

自动更新

update_files.sh脚本会从指定网站下载新版本的路由及dnsmasq配置文件。只要在服务器上定时运行freeway.py脚本更新以上文件(主要是GFW路由)。这个脚本利用了wget的时间戳--timestamping or -N,来检查服务器的版本是否比本地的新,如果是的话就下载,不是的话就不下载。

需要根据情况修改路径及网站:

定期执行

通过Web界面或直接修改/etc/config/cron来添加cron任务。如:

0 11 * * * /etc/openvpn/update_files.sh 

运行/etc/init.d/cron start后,会自己生成vi /etc/crontabs/root

启动并让它开机运行

/etc/init.d/cron start
/etc/init.d/cron enable

大功告成!😄

测试

重启一下路由,运行下面命令看vpn是否工作正常,正常情况下你应该看到它通过的是你VPN的ip,如10.8.0.1

traceroute facebook.com