树梅派翻墙路由器之透明代理篇

星期一 下午 16:45 狂奔的蜗牛 树莓派 6758 views
1
Comments

本篇只涉及透明代理部分,可以在大部分linux上实践。

首先说明要解决的问题:

1、dns污染的问题。

2、透明代理访问国外ip的流量。

使用到的工具和原理:

首先我们要有一个国外的vps(假设IP是:19.111.111.111)并且安装了shadowsocks,端口是:8488,连接密码是admin,加密方式:aes-256-cfb。

树莓派上安装shadowsocks-libev,注意不是shadowsocks。至于有人会问为什么不用一个,回答因为我实际使用的过程中发现一个不稳定,

现在的组合是我发现的比较稳定的。

shadowsocks安装链接:https://github.com/shadowsocks/shadowsocks/tree/master

shadowsocks-libev安装连接:https://github.com/shadowsocks/shadowsocks-libev

1、解决dns污染问题.

原理就是我们本地安装一个dns服务器,然后本地dns服务器通过ss加密管道使用vps真正去解析域名,

然后vps把解析结果通过加密管道返回给本地的dns服务。

我们在树莓派本地安装一个dnsmasq在53端口提供dns服务,然后配置dnsmasq上游dns为本地127.0.0.1#1053

配置方法是:

vi /etc/dnsmasq.conf  

修改:server=127.0.0.1#1053 

取消  no-resolv前面的注释

保存,然后service dnsmasq restart 重启服务。

接下来我们修改:vi /etc/resolv.conf 清空内容,然后输入:nameserver 127.0.0.1

目的是让树莓派解析域名使用本地的dnsmasq

上面我们看见dnsmasq里面配置了上游dns 127.0.0.1#1053 ,这个127.0.0.1#1053就是我们使用ss-tunnel管道提供的,

新建文件:/etc/ss.json,保存连接shadowsocks服务器的信息。内容如下:

{
    "server": "19.111.111.111",
    "server_port": 8488,
    "local_address": "0.0.0.0",
    "password": "admin", 
    "timeout": 30,
    "method": "aes-256-cfb"
}

然后我们启动ss-tunnel即可,

启动命令:ss-tunnel -c /etc/ss.json -l 1053 -L 8.8.8.8:53 -u -vvv  这是前台运行方式,如果发现没问题就可以放到后台运行。

到此为止,我们只要的设备只要使用树莓派当作dns解析服务器就可以dns污染问题。

2、前面我们解决了dns污染问题,拿到了域名的真实ip,接下来就是怎么突破封锁,访问这个ip。

原理就是把树莓派当作网关,把国外ip的数据包都转给ss-redir提供的管道,

然后ss-redir使用和shadowsocks服务器建立的加密管道访问国外的ip,这样就解决了访问IP的问题。

首先我们要启动ss-redir,

启动命令:ss-redir -c /etc/ss/ss.json  -l 1080 -vvv 这是前台运行方式,如果发现没问题就可以放到后台运行。

接下来就是配置iptables nat实现数据包自动转给ss-redir

首先:

编辑/etc/sysctl.conf,去掉以下属性前的注释:

net.ipv4.ip_forward=1

运行 sysctl -p来启用

$ap_if_net可以上网的网卡名称,比如:wlan0
$ap_if,ap热点的网卡名称,比如:wlan1
iptables -t nat -A POSTROUTING -o $ap_if_net -j MASQUERADE
iptables -A FORWARD -i $ap_if_net -o $ap_if -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $ap_if -o $ap_if_net -j ACCEPT

把下面内容保存为shell脚本使用的时候执行即可:

        #运行ss-server服务端服务器IP地址:
        ss_server_ip=19.111.111.111

        #本地运行ss-local客户端监听的端口:
        ss_local_port=1080

        #create a new chain named SHADOWSOCKS
        iptables -t nat -N SHADOWSOCKS

        # Ignore your shadowsocks server's addresses
        # It's very IMPORTANT, just be careful.
        iptables -t nat -A SHADOWSOCKS -d $ss_server_ip -j RETURN

        # Ignore LANs IP address
        iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN

        # Ignore Asia IP address
        iptables -t nat -A SHADOWSOCKS -d 1.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 14.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 27.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 36.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 39.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 42.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 49.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 58.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 59.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 60.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 61.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 101.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 103.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 106.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 110.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 111.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 112.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 113.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 114.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 115.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 116.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 117.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 118.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 119.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 120.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 121.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 122.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 123.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 124.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 125.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 126.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 169.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 175.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 180.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 182.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 183.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 202.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 203.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 210.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 211.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 218.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 219.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 220.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 221.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 222.0.0.0/8 -j RETURN
        iptables -t nat -A SHADOWSOCKS -d 223.0.0.0/8 -j RETURN
        # Anything else should be redirected to shadowsocks's local port
        iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports $ss_local_port
        # Apply the rules to nat client
        iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
        # Apply the rules to localhost
        iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS
上面的脚本作用就是把国外的ip数据包都转给1080端口,也就是ss-redir监听的端口。

如果要删除上面规则

执行下面的即可:

        iptables -t nat -D OUTPUT -p tcp -j SHADOWSOCKS
        iptables -t nat -F SHADOWSOCKS 
        iptables -t nat -X SHADOWSOCKS

2016/10/09 16:45:35
评论(1)
1楼 berlloon 评论时间:2016-12-18 12:10:46 引用
您好,非常感谢您谢了这篇文章,但是我在按照您的教程做得时候,做完这些步骤,把手机的网关设置成树莓派的ip,但是还是上不了网
共 1 个评论 1/1 页

发表评论

引用成功取消引用×

昵称*: 邮箱*: 网址:

最多可输入300字符 验证码*:


Process: 0.055s | DB :18 queries | UseMem:2,329 kb