查看: 18002|回复: 2

[项目] 用树莓派2代打造智能家庭路由

[复制链接]
  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-3-4 08:54:49 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 小菜儿 于 2015-3-4 08:57 编辑

    目录:

    家里的宽带上下行都有10Mbps了吧?除了可以BT下载外还能让你的移动设备在外的时候也能科学上网。

    区别于在海外架设VPN服务:

    • 国内和大部分国外网站都可以直连而不降低速度;不像海外VPN所有流量(国内和国外网站)都要经过海外服务器,速度有一定的延迟
    • 这个方案代理可以使用免费的Goagent服务;或低成本的ssh帐号;而租用海外VPS服务器自建服务或购买VPN帐号费用较高些;
    • 利用的是家里的宽带,只有树莓派的硬件成本,没有主机托管成本;

    假设家里的路由器IP地址为:192.168.1.1,树莓派2的IP地址为:192.168.1.3,以下是需要安装和设置步骤。

    PPTP和L2TP VPN Server

    首先在树莓派上安装和设置VPN服务器,移动设备就可以通过运营商网络连接回家里的树莓派(iPhone和Android都内置了PPTP和L2TP客户端),这样移动设备将以树莓派为路由访问网站,通过一些设置我们可以让树莓派提供科学上网服务。

    关于PPTP和L2TP VPN设置和安装可以参考: http://hugozhu.myalert.info/2013⁄03/01/setup-l2tp-pptp-openvpn-on-ubuntu.html

    但在树莓派上安装L2TP时不能直接apt-get install openswan,需要手动下载来安装,原因是因为最新的版本在协议上有些不兼容:

    1. wget http://snapshot.raspbian.org/201403301125/raspbian/pool/main/o/openswan/openswan_2.6.37-3_armhf.deb
    2. sudo dpkg -i openswan_2.6.37-3_armhf.deb
    复制代码

    假设VPN服务端的local ip我们设置为192.168.3.1,PPTP客户端IP分配区间为:192.168.3.200~192.168.3.210,L2TP 客户端IP分配区间为:192.168.3.100~192.168.3.110,我们可以通过iptables对IP来源为192.168.3.0/24网段的流量做特殊的处理以达到科学上网的目的。

    完成这一步后,需要在路由器上设置端口转发,使得使用运营商网络如移动4G的手机可以通过PPTP或L2TP连到树莓派上。

    PPTP需要设置的端口转发 - tcp: 1723

    L2TP需要设置的端口转发 - tcp: 50, udp: 500,4500,1701

    两种VPN服务相比较:PPTP拨号速度比较快,但是不安全;L2TP有加密,相对安全。

    Redsocks2

    redsocks2是一个透明TCP代理,其实现使用了libevent库,性能较好,其最大的特点是如果目标IP可以直连则不会转发流量给加密代理,如果IP不能直连(通过连接超时判断)则会将流量转发给加密代理。这样可以将最少的流量转发到代理上,访问一般的国外网站如yahoo.com也不会经过代理而减速,在配置方面则做到了零配置,不需要手工维护网站名单。代理也能支持很多中类型,如socks5, shadowsocks, goagent, http-proxy等,redsocks2安装和配置可以见链接: http://github.com/hugozhu/redsocks

    这里我们假设redsocks2的端口使用12345

    iptables

    使用iptables我们可以将VPN客户端192.168.3.0/24的流量转发到redsocks5的端口12345

    1. sudo iptables -F
    2. sudo iptables -X
    3. sudo iptables -t nat -F
    4. sudo iptables -t nat -X
    5. sudo iptables -t nat -A PREROUTING -s 192.168.3.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 12345 #转发VPN客户端的HTTP流量到端口12345
    6. sudo iptables -t nat -A PREROUTING -s 192.168.3.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 12345 #转发VPN客户端的HTTPS流量到端口12345
    7. sudo iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE #转发VPN客户端的TCP流量到网络出口,并进行IP伪装;如果树莓派使用无线网卡则将eth0改成wlan0
    复制代码
    DNS加固

    上面的设置我们解决了VPN拨号到树莓派的客户端通过redsocks2透明代理分流为直连或通过加密代理连接和访问目标网站,我们还需要解决一下DNS查询被纂改为不存在的IP地址的问题。

    ChinaDNS

    虽然redsocks2也具备通过tcp查询DNS而防污染的功能,但实测性能并不怎么好。ChinaDNS是一个可以防污染的DNS服务器,内存占用小,同时使用114和Google DNS,OpenDNS,AliDNS等,国内网站无延迟;

    dnsmasq

    dnsmasq是一个小巧的DNS和DHCP服务器软件,是openwrt的标配,具备dns缓存的功能,建议使用dnsmasq作为解析服务器,ChinaDNS则作为dnsmasq的上游(upstream)服务器,这样搭配较稳定又能缓存解析结果而提高并发性能,dnsmasq安装和配置如下:

    安装:

    1. sudo apt-get install dnsmasq
    复制代码

    配置:

    1. no-resolv
    2. server=127.0.0.1#1053
    复制代码

    完成这一步后,我们可以修改pptp和l2tp服务的配置将vpn客户端的DNS服务器设置为192.168.3.1

    总结

    通过以上的设置,可以充分发挥树莓派2的4核CPU性能,不仅可以为移动设备提供科学上网服务,也可以为家里的支持PPTP或L2TP VPN的台式机提供同样的服务。如果要进一步折腾,还可以通过增加usb网卡和交换机,让树莓派2作为主路由提供上网服务。


    转自:http://hugozhu.myalert.info/2015 ... ocks2-chinadns.html
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-3-4 09:32:24 | 显示全部楼层
    收藏。        
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-7 11:49
  • 签到天数: 2193 天

    连续签到: 33 天

    [LV.Master]伴坛终老

    发表于 2015-3-4 10:06:43 | 显示全部楼层
    顶一个!!!收藏了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 15:17 , Processed in 0.129367 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.