Pages

Thursday, 30 July 2015

使用DD-WRT自动翻墙(Autoddvpn)去广告(Adblock)并开启端口转发


最近在鼓捣DD-WRT,把自家用的TP941N v5刷成了DD-WRT并且用脚本实现了自动翻墙。

脚本:

#!/bin/sh
#开启iptables的net转发功能,在默认的dd-wrt中端口失效,添加这一句就正常
iptables -t nat -A POSTROUTING -j MASQUERADE

#本地ISP劫持HTTP协议,首次HTTP访问会转到本地电信广告,直接过滤
cd /tmp;wget http://www.naic.cc/0.txt
rm /tmp/0.txt

#下载并自动配置autoddvpn内容
cd /tmp;wget http://autoddvpn.googlecode.com/svn/trunk/pptp/wget/run.sh  && /bin/sh run.sh || touch failed

#下载并自动配置adblock的chinalist lazy规则,提取当中的广告域名指向127.0.0.1
rm /tmp/dnsmasq.ads
wget -O - http://adblock-chinalist.googlecode.com/svn/trunk/adblock-lazy.txt |
grep ^\|\|[^\*]*\^$ |
sed -e 's:||:address\=\/:' -e 's:\^:/127\.0\.0\.1:' > /tmp/dnsmasq.ads
killall dnsmasq
dnsmasq --conf-file=/tmp/dnsmasq.conf

以上的脚本添加到【管理】→【命令】,保存为【自定义指令】

然后添加
/tmp/custom.sh

保存为【防火墙指令】

这样,每次链接网络成功之后,就会执行这个脚本。

当然,以上只是第一步,下面设置VPN链接。

PPTP主机请用IP设置, 不要设置FQDN,否则之后会断线
【MPPE加密】裡面输入 mppe required,no40,no56,stateless
【远程子网】 与【远程子网掩码】是你PPTP拨上之后的VPN子网IP与掩码,请依据自己的环境设置,必要的话可以先用电脑尝试连上PPTP, 观察取得的VPN IP/掩码是多少,假如是取得192.168.199.3, 则通常设置成【远程子网】192.168.199.0【远程子网掩码】255.255.255.0即可,以此类推。(注意:这两个参数不用设定也是可以连 上PPTP, 但是无法调整正确的路由表,造成无法顺利运作,请务必弄清楚这两个数值,如果设定错的话会运行失败的)。

然后进入【设置】→【DNSMasq】

进入【设置】,选中【为DHCP使用DNSMasq】【为DNS使用DNSMasq】【以DHCP为准】。
【静态DNS 1/2/3】设置成你本地的DNS、114DNS或者留空均可。

然后进入【服务】→【服务】→【DNSMasq

【DNSMasq】【本地DNS】【No DNS Rebind】全部启用。
为了避免DNS污染,可以设置由远程DNS解析特定的域名,就需要设置【DNSMasq 附加选项】
格式:
conf-file=/tmp/dnsmasq.ads
server=/google.com/8.8.8.8
第一行是添加去广告的配置,第二行意思是“google.com用8.8.8.8来解析”避免和谐,我这里没有把更多的和谐域名放出来,大家可以自行增加。
更多的autoddvpn问题请访问
http://code.google.com/p/autoddvpn/
获取.
-----------------------------------------
在DD-WRT下面建立 SSH Tunnel (Socks5 Dynamic Port Forwarding) 翻墙 
 
1 看标题就知道了,通常情况下建立SSH Tunnel都是用一些电脑上的软件,比如bitvise tunnelier,putty,myentunnel,以及Linux和OS X上的openssh,现在我要在安装了DD-WRT的路由器上建立,这样无论你连接路由器的设备是什么,都可以很方便的用上这个Tunnel翻墙或者看 一些国内无法访问的网站。

2 首先需要的软件和硬件:
 2.1 一个位于国外的服务器,且提供ssh接入,这里假设为 server.com, 用户名密码分别为: username, password
 2.2 一台刷了DD-WRT的路由器,这里假设路由器的ip地址为 192.168.2.1,路由器能够连接外网
 2.3 路由器里面需要安装的软件 zlib, libopenssl,openssh-client,autossh (顺次安装)
 2.4 安装这些软件的工具: ipkg (DD-WRT自带)
 2.5 安装这些软件的条件:开启jffs支持,进入dd-wrt网页界面-管理-jffs开启(因为dd-wrt的系统是只读的,装了任何软件重启就消失了,而jffs是将路由器的空闲空间挂在到dd-wrt上,第三方软件都装在这里)

3 安装软件
 3.1 telnet 192.168.2.1 or ssh root@192.168.2.1,两种方式都可以登入dd-wrt内部,用户名为root,密码为设置的路由器密码
 3.2 cd /jffs && mkdir -p tmp/ipkg && ipkg update
 3.3 ipkg -force-depends  install zlib libopenssh (这两个软件自动安装)
 3.4 wget http://downloads.openwrt.org/whiterussian/packages/openssh-client_4.4p1-1_mipsel.ipk && ipkg -force-depends install openssh-client_4.4p1-1_mipsel.ipk (这个软件要手动安装且加上 -force-depends,否则会出错)
 3.5 wget http://downloads.openwrt.org/backports/rc5/autossh_1.3-1_mipsel.ipk && ipkg -force-depends install autossh_1.3-1_mipsel.ipk  (同上原因)
 3.6 以上软件都安装在 /jffs/usr/bin/

4 配置dd-wrt端的ssh
 4.1 配置有点纠结,因为autossh和openssh是作为第三方软件安装的,且安装路径不一定在系统的path里面,所以所有命令的运行都要指定绝对路径
 4.2 先运行一个ssh命令试试看是否能够作tunnel
 /jffs/usr/bin/ssh -D 192.168.2.1:7070  username@server.com
等几秒,输入password,连接成功,表示可以连接
 4.2 总不能每次都输入密码把,所以这里要建立一个 id_rsa文件 (详见 ssh-keygen),且放到/jffs/etc/ssh/这里,然后无须输入密码实现tunnel的ssh命令就变成这样:
  /jffs/usr/bin/ssh -D 192.168.2.1:7070 -Nfqn -i /jffs/etc/ssh/id_rsa username@server.com,加入了几个参数,这样程序就后台运行,且不执行其它命令。
 4.3 openssh的命令是不支持断线重新连接的,所以这里需要 autossh,首先4.1提到的,要先定义autossh能够使用的ssh的绝对路径,这里用export:
 export AUTOSSH_PATH="/jffs/usr/bin/ssh" ,然后运行:
 /jffs/usr/bin/autossh autossh -M  20000 -D 192.168.2.1:7070 -Nfqn -i /jffs/etc/ssh/id_rsa username@server.com
4.4 综合以上,执行一个ssh tunnel需要敲入两次命令,一次是export 定义变量,一次是autossh,为了方便,这里建立一个脚本文件:
 vi /jffs/usr/bin/startssh.sh 里面内容如下:
 #! /bin/sh
 export AUTOSSH_PATH="/jffs/usr/bin/ssh"
 /jffs/usr/bin/autossh  -M  20000 -D 192.168.2.1:7070 -Nfqn -i /jffs/etc/ssh/id_rsa username@server.com
 保存后让这个脚本变成可执行文件:
 chmod +x  /jffs/usr/bin/startssh.sh
4.5 ok,基本上成功了要启动ssh tunnel,只需要运行 /jffs/usr/bin/startssh.sh
4.6 路由器重启了怎么办?将以上的脚本改名为 startssh.startup 放入: /jffs/etc/config/ 下面,路由器开机就会自动启动,注意扩展名(参考这里

5 电脑连接上路由器之后的一些代理设置:
 firefox : 安装 foxyproxy,代理设置为 socks5 192.168.2.1 端口 7070
 chrome: 安装 switchy, 代理设置为  socks5 192.168.2.1 端口 7070

6 ipad,iphone 也可以用的上吗?
当然,这里要用到pac文件,将ssh tunnel的socks5代理转换为http代理,方法如下
 6.1 生成文件 pac.pac ,内容如下:
   
function FindProxyForURL(url, host) 
return "SOCKS 192.168.2.1:7070"; 
  6.2 将这个pac.pac文件保存到http web服务器上去,保证能访问,比如保存到这个地方:
 
 http://server.com/pac.pac
  6.3 打开iphone/ipad的wifi设置,进入你连接的哪个wifi设置,设置自动代理,地址填入:
 http://server.com/pac.pac

至此,所有连接到这台dd-wrt的路由器的设备,都可以无缝的翻墙了!


7 补充说明:

另外的方式启动脚本
建立文件 abc.sesbutton
内容:

#! /bin/sh
 export AUTOSSH_PATH="/jffs/usr/bin/ssh"
 /jffs/usr/bin/autossh  -M  20000 -D 192.168.2.1:7070 -Nfqn -i /jffs/etc/ssh/id_rsa username@server.com
将这个文件放入 /jffs/etc/config/
然后就可以通过按路由器上的那个一键加密的键启动这个脚本
参考这里
试过了 wanup, startup,prewall 等方式都不行。

update:

DDWRT真的不适合干这事情,还是openwrt方便.

路径这部分其实还可以使用:
mount --bind /jffs/usr/bin/ssh /usr/bin/ssh
这样openssh就取代了默认的dropbear的ssh

from http://catty-house.blogspot.hk/2012/07/dd-wrt-ssh-tunnel-socket5-dynamic-port.html
----------------------------------------------------------------------------------------------

用DD-WRT做代理,突破公司对网络的封锁 



1. 首先打开DD-WRT的ssh功能 (DD-WRT是用dropbear这个ssh服务端作为ssh daemon服务)
方法:登陆路由web管理界面 -> 服务(Services)-> 找到Secure Shell(安全外壳)->选择启用->密码登录也选择启用->端口填入80
2. 允许从Internet进行ssh登录 (第一步只是开启了内网的ssh登录)
方法:管理->找到“远程管理”->启用ssh管理->ssh端口填入80

3. 如果你不是使用80作为ssh端口,那么可以跳过此步设置。由于web管理界面是要用到80端口作为http服务的,所以刚才设置好ssh端口,重启后端 口冲突,会导致ssh服务(dropbear进程)启动失败,所以我们必须把web管理界面的http服务端口改到其它端口
方法:管理->选择下面一排的"诊断"(Diagnose)标签,在"命令"中粘贴以下命令:
killall httpd
cd /www
httpd -p 81 -h /www
dropbear -b /tmp/loginprompt -r /tmp/root/.ssh/ssh_host_rsa_key -d /tmp/root/.ssh/ssh_host_dss_key -p 80
之后点击"保存启动命令",再重启就可以了
原理就是让路由在启动后自动先杀掉httpd服务,再把该服务重新启动到81端口,最后再启动ssh服务(dropbear)到80端口

(补充:还可以telnet到路由,用nvram命令更改httpd以及ssh服务的端口,满足对命令行有癖好的同学,呵呵,具体方法是:
# telnet 192.168.1.1
# nvram set rc_startup="
> killall httpd
> cd /www
> httpd -p 81 -h /www
> dropbear -b /tmp/loginprompt -r /tmp/root/.ssh/ssh_host_rsa_key -d /tmp/root/.ssh/ssh_host_dss_key -p 80
> "
# nvram commit
输入第二行(nvram set rc_startup=")后,提示符会从#变成>,这时候再输入需要自动执行的命令,最后输入双引号回车结束
nvram commit是把刚才需要执行的命令保存到路由的flash,这样掉电重启才有用
另外可以用nvram get rc_startup查看输入的命令是否正确)
4.设置一个动态域名,DD-WRT支持3322的动态域名
方法:设置->DDNS(动态DNS)->DDNS服务中选择3322.org,用户名密码和主机名可以到www.3322.org免费注册->类型选择动态
(主机名填你申请好的完整域名:xxxx.3322.org)
5. 路由设置已经完成,下面在你公司的电脑上,需要用ssh登录你的路由,然后在本机开一个代理供你自己使用(以翻越公司的防火墙)
软件推荐两个,一个是MyEntunnel(http://nemesis2.qx.net/software-myentunnel.php),另一个就是putty了
怎么设置转发和代理的教程已经比较多,我这里顺便简单说明一下吧,上图说明(红框的是要注意的地方,其它根据自己需要选择):
MyEntunnel (比较简洁,代理专用,比putty的好的地方是不用输入用户名密码,并且可以最小化到托盘)
填入路由动态域名和端口,下面的SOCKS Port随便自己喜欢填,注意不要跟本机已使用端口冲突就行(不了解就用我这个端口好了,应该没其它软件会用这个端口吧....)
putty (比较知名,比起MyEntunnel来有命令行,功能比较多):
填入路由动态域名和端口:
设置本地代理的端口,注意要选择Dynamic,端口一样随便自己喜欢
上两步设置好后选择open,填入用户名密码登录后即可
(注意putty不可以最小化到托盘,可以用"Minimize To Tray"这个软件将窗口最小化到右下角任务托盘)

6. 可以上网了,设置IE或者其它浏览器的代理,该代理为socks5代理,以IE6为例
Internet选项->连接->局域网设置->勾上为LAN使用代理服务器->高级
在 IE设置好后,MyIE,GreenBrowser可以选择使用IE代理,或者直接添加一个socks5代理,就不再细说这样不管公司封锁端口,如何封锁 关键字,只要开放80端口,我们都能像在家里上网一样,访问互联网了,当然,有机会你可以把路由放到国外,这样就能突破我们伟大的墙了.
from http://wangyuicq.blog.163.com/blog/static/46395730201011101632816/