用OpenWRT打造自动翻墙路由器(详解篇)
最初先调整一下bash,让它符合自己的工作习惯:
到vim /etc/profile,可以在里面设置自己想要的alias
比如我加了一行:
alias ll='ls -al'
然后就装图形显示界面再说
首先update一下
opkg update
安装luci
opkg install luci
设置luci自动启动
/etc/init.d/uhttpd enable
结果告诉我
/etc/rc.common: line 1: procd_add_reload_trigger: not found
坑爹,搜索了一下发现是因为我的固件版本与软件仓库的版本不符,导致软件与系统组件不搭配所致,后来发现是新版的OpenWrt更新了而已,于是我升级了一下系统就好了,如果你无法升级系统,那么可以按照下述方式解决:
先把安装的那些个用不了的一个个卸载掉
opkg remove luci
opkg remove uhttpd-mod-ubus
opkg remove uhttpd
修改opkg的配置,修改到以前的仓库
vim /etc/opkg.conf
注释掉原有的仓库地址,改用旧的
#src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
src/gz barrier_breaker http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages
然后在opkg update一下,继续
opkg install luci
opkg install luci-i18n-chinese
这次在/etc/init.d/uhttpd start 的时候就不会报错了
然后稳妥的进入luci的Web界面,修改一下时区、界面语言之类的
接下来的工作是修改防火墙的设置,让远端的HTTP和SSH能够通过
vim /etc/config/firewall
config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '22'
option name 'Allow_remote_SSH'
config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '80'
option name 'Allow_Remote_HTTP'
我的翻墙措施主要是采用这个开源的项目,特点是小众、快速,省去了流行的ShadowSocks的一大堆看着头疼的加密措施,仅仅只是以翻过去为目的,所以我需要一套erlang的运行环境
安装erlang
opkg install erlang
安装erlang的编译器
opkg install erlang-compiler
编译器只需要运行一遍就可以了,如果需要节约空间,可以编译完源程序之后删除它
安装代理脚本的客户端
上传脚本,不想占内存和空间来安装git,直接把脚本download 下来,然后scp传过去就行了
scp proxy.erl root@192.168.0.253:/root
只传这么一个文件就可以了,其他的都没有必要
然后在目录下运行
erlc proxy.erl
会在同级目录下编译出一个proxy.beam文件,然后就可以轻松的删除erlang-compiler了
opkg remove erlang-compiler
启动一下代理服务器试试看
erl +K true -noshell -detached -s proxy front_start 【远端IP】 【远端端口】 0.0.0.0 【本地端口】
可以先用socket5模式来检查一下代理是否运行正常
开始配置自动翻墙
安装iptables的插件
opkg install iptables-mod-u32
opkg install iptables-mod-geoip
安装redsocks
opkg install redsocks
配置redsocks
vim /etc/redsocks.conf
改变以下选项:
daemon = on
log_debug = off
log_info = off
local_ip = 127.0.0.1
local_port = 12345
ip = 127.0.0.1
port =【本地端口】
type = socks5
删掉不用的udp转发和DNS转发选项,然后启动redsocks
/etc/init.d/redsocks start
/etc/init.d/redsocks enable
到这里下载geoip的国家文件(已经编译好了的版本,因为IPv4已经分配完毕了,所以没必要去追求新的,直接下老的用毫无压力),解压后对应分别放入/usr/share/xt_geoip/BE和/usr/share/xt_geoip/LE目录
在iptables中添加自定义的跳转
(以下这几条命令需要加到/etc/rc.local和/etc/firewall.user两个文件中,因为当路由器重启的时候,系统不会主动加载firewall.user文件,只有重启防火墙的时候才会主动加载,为了让转发重启后立即有效,都加上是必要的)
iptables -F fwmark -t mangle
iptables -A fwmark -t mangle -m geoip -p tcp --destination-country CN -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 【你的VPS的IP】-j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 192.168.0.0/16 -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 127.0.0/8 -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 10.0.0/8 -j MARK --set-mark 2
iptables -A fwmark -t mangle -m mark -p tcp ! --mark 2 -j MARK --set-mark 1
iptables -F prerouting_rule -t nat
iptables -A prerouting_rule -t nat -m mark -p tcp --mark 1 -j REDIRECT --to-port 12345
如果顺利的话,现在已经是可以能够访问facebook等网站了,但是我们还是需要解决DNS污染问题
安装本地的dns服务器pdnsd
opkg install pdnsd
配置它:
global {
# debug = on; # 调试模式, 日志会写入 /var/pdnsd/pdnsd.debug
perm_cache=1024;
cache_dir="/var/pdnsd";
run_as="nobody";
server_port = 1053; # 使用 1053 作为 dns 端口, 默认是 53
server_ip = any;
status_ctl = on;
query_method=tcp_only; # 最重要的配置, 只使用 tcp 查询上级 dns
min_ttl=15m;
max_ttl=1w;
timeout=10;
}
server {
label= "wido"; # 这个随便写
ip = 8.8.8.8; # 这里为上级 dns 的 ip 地址
root_server = on; # 设置为 on 后, 就代替系统默认的 dns 了.
uptest = none; # 不去检测 dns 是否无效.
}
编辑DNSMSQ的配置文件,让部分域名重新解析
vim /etc/config/dhcp
前面部分改为:
config dnsmasq
option domainneeded '1'
option boguspriv '1'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
list server '/.facebook.com/127.0.0.1#1053'
list server '/.twitter.com/127.0.0.1#1053'
list server '/.google.com/127.0.0.1#1053'
list server '/.gstatic.com/127.0.0.1#1053'
list server '/.googleusercontent.com/127.0.0.1#1053'
list server '/.appspot.com/127.0.0.1#1053'
list server '/.googlecode.com/127.0.0.1#1053'
list server '/.googleapis.com/127.0.0.1#1053'
list server '/.gmail.com/127.0.0.1#1053'
list server '/.google-analytics.com/127.0.0.1#1053'
list server '/.youtube.com/127.0.0.1#1053'
list server '/.blogspot.com/127.0.0.1#1053'
list server '/.blogger.com/127.0.0.1#1053'
list server '/.ggpht.com/127.0.0.1#1053'
list server '/.googleapis.com/127.0.0.1#1053'
list server '/.facebook.com/127.0.0.1#1053'
list server '/.fbcdn.net/127.0.0.1#1053'
list server '/.yimg.com/127.0.0.1#1053'
list server '/.staticflickr.com/127.0.0.1#1053'
list server '/.twitter.com/127.0.0.1#1053'
list server '/.tinypic.com/127.0.0.1#1053'
list server '/.yfrog.com/127.0.0.1#1053'
list server '/.twitpic.com/127.0.0.1#1053'
接下来重启它
/etc/init.d/dnsmasq restart
然后检查一下就应该可以了
到vim /etc/profile,可以在里面设置自己想要的alias
比如我加了一行:
alias ll='ls -al'
然后就装图形显示界面再说
首先update一下
opkg update
安装luci
opkg install luci
设置luci自动启动
/etc/init.d/uhttpd enable
结果告诉我
/etc/rc.common: line 1: procd_add_reload_trigger: not found
坑爹,搜索了一下发现是因为我的固件版本与软件仓库的版本不符,导致软件与系统组件不搭配所致,后来发现是新版的OpenWrt更新了而已,于是我升级了一下系统就好了,如果你无法升级系统,那么可以按照下述方式解决:
先把安装的那些个用不了的一个个卸载掉
opkg remove luci
opkg remove uhttpd-mod-ubus
opkg remove uhttpd
修改opkg的配置,修改到以前的仓库
vim /etc/opkg.conf
注释掉原有的仓库地址,改用旧的
#src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
src/gz barrier_breaker http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages
然后在opkg update一下,继续
opkg install luci
opkg install luci-i18n-chinese
这次在/etc/init.d/uhttpd start 的时候就不会报错了
然后稳妥的进入luci的Web界面,修改一下时区、界面语言之类的
接下来的工作是修改防火墙的设置,让远端的HTTP和SSH能够通过
vim /etc/config/firewall
config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '22'
option name 'Allow_remote_SSH'
config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '80'
option name 'Allow_Remote_HTTP'
我的翻墙措施主要是采用这个开源的项目,特点是小众、快速,省去了流行的ShadowSocks的一大堆看着头疼的加密措施,仅仅只是以翻过去为目的,所以我需要一套erlang的运行环境
安装erlang
opkg install erlang
安装erlang的编译器
opkg install erlang-compiler
编译器只需要运行一遍就可以了,如果需要节约空间,可以编译完源程序之后删除它
安装代理脚本的客户端
上传脚本,不想占内存和空间来安装git,直接把脚本download 下来,然后scp传过去就行了
scp proxy.erl root@192.168.0.253:/root
只传这么一个文件就可以了,其他的都没有必要
然后在目录下运行
erlc proxy.erl
会在同级目录下编译出一个proxy.beam文件,然后就可以轻松的删除erlang-compiler了
opkg remove erlang-compiler
启动一下代理服务器试试看
erl +K true -noshell -detached -s proxy front_start 【远端IP】 【远端端口】 0.0.0.0 【本地端口】
可以先用socket5模式来检查一下代理是否运行正常
开始配置自动翻墙
安装iptables的插件
opkg install iptables-mod-u32
opkg install iptables-mod-geoip
安装redsocks
opkg install redsocks
配置redsocks
vim /etc/redsocks.conf
改变以下选项:
daemon = on
log_debug = off
log_info = off
local_ip = 127.0.0.1
local_port = 12345
ip = 127.0.0.1
port =【本地端口】
type = socks5
删掉不用的udp转发和DNS转发选项,然后启动redsocks
/etc/init.d/redsocks start
/etc/init.d/redsocks enable
到这里下载geoip的国家文件(已经编译好了的版本,因为IPv4已经分配完毕了,所以没必要去追求新的,直接下老的用毫无压力),解压后对应分别放入/usr/share/xt_geoip/BE和/usr/share/xt_geoip/LE目录
在iptables中添加自定义的跳转
(以下这几条命令需要加到/etc/rc.local和/etc/firewall.user两个文件中,因为当路由器重启的时候,系统不会主动加载firewall.user文件,只有重启防火墙的时候才会主动加载,为了让转发重启后立即有效,都加上是必要的)
iptables -F fwmark -t mangle
iptables -A fwmark -t mangle -m geoip -p tcp --destination-country CN -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 【你的VPS的IP】-j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 192.168.0.0/16 -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 127.0.0/8 -j MARK --set-mark 2
iptables -A fwmark -t mangle -p tcp -d 10.0.0/8 -j MARK --set-mark 2
iptables -A fwmark -t mangle -m mark -p tcp ! --mark 2 -j MARK --set-mark 1
iptables -F prerouting_rule -t nat
iptables -A prerouting_rule -t nat -m mark -p tcp --mark 1 -j REDIRECT --to-port 12345
如果顺利的话,现在已经是可以能够访问facebook等网站了,但是我们还是需要解决DNS污染问题
安装本地的dns服务器pdnsd
opkg install pdnsd
配置它:
global {
# debug = on; # 调试模式, 日志会写入 /var/pdnsd/pdnsd.debug
perm_cache=1024;
cache_dir="/var/pdnsd";
run_as="nobody";
server_port = 1053; # 使用 1053 作为 dns 端口, 默认是 53
server_ip = any;
status_ctl = on;
query_method=tcp_only; # 最重要的配置, 只使用 tcp 查询上级 dns
min_ttl=15m;
max_ttl=1w;
timeout=10;
}
server {
label= "wido"; # 这个随便写
ip = 8.8.8.8; # 这里为上级 dns 的 ip 地址
root_server = on; # 设置为 on 后, 就代替系统默认的 dns 了.
uptest = none; # 不去检测 dns 是否无效.
}
编辑DNSMSQ的配置文件,让部分域名重新解析
vim /etc/config/dhcp
前面部分改为:
config dnsmasq
option domainneeded '1'
option boguspriv '1'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
list server '/.facebook.com/127.0.0.1#1053'
list server '/.twitter.com/127.0.0.1#1053'
list server '/.google.com/127.0.0.1#1053'
list server '/.gstatic.com/127.0.0.1#1053'
list server '/.googleusercontent.com/127.0.0.1#1053'
list server '/.appspot.com/127.0.0.1#1053'
list server '/.googlecode.com/127.0.0.1#1053'
list server '/.googleapis.com/127.0.0.1#1053'
list server '/.gmail.com/127.0.0.1#1053'
list server '/.google-analytics.com/127.0.0.1#1053'
list server '/.youtube.com/127.0.0.1#1053'
list server '/.blogspot.com/127.0.0.1#1053'
list server '/.blogger.com/127.0.0.1#1053'
list server '/.ggpht.com/127.0.0.1#1053'
list server '/.googleapis.com/127.0.0.1#1053'
list server '/.facebook.com/127.0.0.1#1053'
list server '/.fbcdn.net/127.0.0.1#1053'
list server '/.yimg.com/127.0.0.1#1053'
list server '/.staticflickr.com/127.0.0.1#1053'
list server '/.twitter.com/127.0.0.1#1053'
list server '/.tinypic.com/127.0.0.1#1053'
list server '/.yfrog.com/127.0.0.1#1053'
list server '/.twitpic.com/127.0.0.1#1053'
接下来重启它
/etc/init.d/dnsmasq restart
然后检查一下就应该可以了
评论
发表评论