本文为转载文章, 仅用于自己的知识管理收集, 如果涉及侵权,请联系 suziwen1@gmail.com,会第一时间删除
收集该文章,并非代表本人支持文中观点,只是觉得文章内容容易引起思考,讨论,有它自有的价值转载自: https://docs.google.com/document/d/1OGIrebKWq__Lt0ADxprxapevC1BEzPaR6ry9XY_WDdA
使用场景
在使用代理上网的情况下,一般需要在每个应用中分别设置代理(如果应用支持代理),很难做到让所有网络流量默认都走代理。
在手机(特别是iphone)上如果不使用VPN,仅通过https或socks5代理也是很难实现类似VPN的全局代理功能。
这里linux pc使用ubuntu 14.04, vpn使用pptp, proxy使用socks5
pptp服务器安装配置
安装pptp服务器
- 1 sudo apt-get install pptpd
执行完上面命令后pptp服务器就安装好了,下面主要就是配置了。
配置pptp服务器
编辑/etc/pptpd.conf
,增加以下两行:
- 1localip 192.168.0.1
- 2remoteip 192.168.0.234-238,192.168.0.245
这里localip指pptp服务端的IP, remoteip是客户端连接后分配的IP范围。
编辑/etc/ppp/chap-secrets,设置pptp认证信息,在最后面新增一行:
vpn pptpd 123456 *
这里vpn是用户名,pptpd是vpn类型,可以设置为*,123456是密码,最后一个*表示接收任何IP的连接。
编辑/etc/ppp/pptpd-options
,添加DNS服务器:
- 1ms-dns 8.8.8.8
- 2ms-dns 8.8.4.4
这里使用google的公共dns服务器,也可以指定你自己的dns服务器。
最后重启pptp服务器使以上设置生效:
- 1 sudo service pptpd restart
查看一下pptp服务是否正在运行:
- 1 netstat -tlnp | grep 1723
出现类似以下信息说明pptp服务正在运行
- 1tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN -
配置linux系统
编辑/etc/sysctl.conf
,增加一行:
- 1net.ipv4.ip_forward=1
使修改生效:
- 1 sudo sysctl -p
到此为止,pptp服务端就配置完了,可以使用手机测试一下。
redsocks安装配置
redsocks可以配置linux下的iptables实现TCP连接的重定向功能
项目介绍:http://darkk.net.ru/redsocks/
项目源码:https://github.com/darkk/redsocks
下载编译redsocks
- 1 git clone https://github.com/darkk/redsocks.git
- 2 cd redsocks
- 3 sudo apt-get install libevent-dev
- 4 make
没有错误的话会生成一个名为redsocks的可执行文件。
新建一个redsocks配置文件redsocks.conf
,内容如下:
- 1base {
- 2 log_debug = on;
- 3 log_info = on;
- 4 log = "file:/tmp/reddi.log";
- 5 daemon = on;
- 6 redirector = iptables;
- 7}
- 8
- 9redsocks {
- 10 local_ip = 0.0.0.0;
- 11 local_port = 31338;
- 12 ip = 127.0.0.1;
- 13 port = 8899;
- 14 type = socks5;
- 15}
这里的local_ip, local_port是redsocks服务的监听地址,ip, port为代理的地址,type指定代理类型。
运行redsocks:
- 1 ./redsocks -c redsocks.conf
因为在配置文件里面指定了后台运行(daemon=on),所以执行以上命令后会直接出现命令行提示符,不会阻塞。
iptables设置
下面是最复杂也是最容易出问题的环节
新建文件ipt.conf
,内容如下:
- 1*filter
- 2:INPUT ACCEPT
- 3:FORWARD ACCEPT
- 4:OUTPUT ACCEPT
- 5COMMIT
- 6
- 7*nat
- 8:PREROUTING ACCEPT
- 9:INPUT ACCEPT
- 10:OUTPUT ACCEPT
- 11:POSTROUTING ACCEPT
- 12# Create new chain
- 13:REDSOCKS -
- 14
- 15-A PREROUTING -i ppp+ -p tcp -j REDIRECT --to 31338
- 16# -A PREROUTING -i ppp+ -p udp --dport 53 -j DNAT --to 192.168.1.1:53
- 17# -A INPUT -p tcp --dport 1723 -j ACCEPT
- 18# -A INPUT -p tcp --dport 47 -j ACCEPT
- 19# -A INPUT -p gre -j ACCEPT
- 20
- 21# Ignore LANs and some other reserved addresses.
- 22# See http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
- 23# and http://tools.ietf.org/html/rfc5735 for full list of reserved networks.
- 24-A REDSOCKS -d 0.0.0.0/8 -j RETURN
- 25-A REDSOCKS -d 10.0.0.0/8 -j RETURN
- 26-A REDSOCKS -d 127.0.0.0/8 -j RETURN
- 27-A REDSOCKS -d 169.254.0.0/16 -j RETURN
- 28-A REDSOCKS -d 172.24.0.0/16 -j RETURN
- 29-A REDSOCKS -d 192.168.0.0/16 -j RETURN
- 30-A REDSOCKS -d 224.0.0.0/4 -j RETURN
- 31-A REDSOCKS -d 240.0.0.0/4 -j RETURN
- 32# Anything else should be redirected to port 31338
- 33# -A REDSOCKS -p tcp -o eth0 -j DNAT --to 127.0.0.1:31338
- 34-A REDSOCKS -p tcp -j REDIRECT --to 31338
- 35-A OUTPUT -p tcp -j REDSOCKS
- 36
- 37-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
- 38COMMIT
是不是很复杂,当然如果你很了解iptables,这就是小菜一碟了。
如果你的系统本身配置了iptables,请根据自身网络情况适当修改。
在上面的配置文件中,有几个方面需要注意:
- 如果你在配置vpn时,将dns设置为8.8.8.8和8.8.4.4,且你的系统又无法访问此dns服务器,这时就要设置dns转发了:
- 1-A PREROUTING -i ppp+ -p udp --dport 53 -j DNAT --to 192.168.1.1:53
这里的--to 192.168.1.1:53
就是用来设置转发到的dns服务器地址。
- 配置中的eth0为系统访问外网的接口,一般情况下为eth0,当有多个接口时会出现eth1, eth2等等,可以通过
ifconfig命令查看自己使用的是哪个接口。
应用iptable设置:
- 1 sudo iptables-restore < ipt.conf
执行完以上命令后配置中方的iptables规则就会立即生效了,可以通过以下命令确认:
- 1 sudo iptables-save
看看输出结果是否与ipt.conf中的一致。
代理配置
可以使用任何标准的https, socks5代理,例如shadowsocks, gost等,客户端的监听地址需要与redsocks配置中的ip, port一致。
OK
DONE!
如果你成功走到了这里,恭喜你,你可以让你的手机,PC无障碍的通过代理全局上网了。