• 主页
  • 标签
  • 归档
  • 搜索
  • Github

August 04, 2021

利用PPTP, redsocks, iptables, https/socks5 proxy实现全局代理上网

本文为转载文章, 仅用于自己的知识管理收集, 如果涉及侵权,请联系 suziwen1@gmail.com,会第一时间删除
收集该文章,并非代表本人支持文中观点,只是觉得文章内容容易引起思考,讨论,有它自有的价值

转载自: https://docs.google.com/document/d/1OGIrebKWq__Lt0ADxprxapevC1BEzPaR6ry9XY_WDdA

使用场景

在使用代理上网的情况下,一般需要在每个应用中分别设置代理(如果应用支持代理),很难做到让所有网络流量默认都走代理。
在手机(特别是iphone)上如果不使用VPN,仅通过https或socks5代理也是很难实现类似VPN的全局代理功能。

利用PPTP, redsocks, iptables, https_socks5 proxy实现全局代理上网

利用PPTP, redsocks, iptables, https_socks5 proxy实现全局代理上网

这里linux pc使用ubuntu 14.04, vpn使用pptp, proxy使用socks5

pptp服务器安装配置

安装pptp服务器

  1. 1$ sudo apt-get install pptpd 

执行完上面命令后pptp服务器就安装好了,下面主要就是配置了。

配置pptp服务器

编辑/etc/pptpd.conf,增加以下两行:

  1. 1localip 192.168.0.1 

  2. 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服务器:

  1. 1ms-dns 8.8.8.8 

  2. 2ms-dns 8.8.4.4 

这里使用google的公共dns服务器,也可以指定你自己的dns服务器。

最后重启pptp服务器使以上设置生效:

  1. 1$ sudo service pptpd restart 

查看一下pptp服务是否正在运行:

  1. 1$ netstat -tlnp | grep 1723 

出现类似以下信息说明pptp服务正在运行

  1. 1tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN - 

配置linux系统

编辑/etc/sysctl.conf,增加一行:

  1. 1net.ipv4.ip_forward=1 

使修改生效:

  1. 1$ sudo sysctl -p 

到此为止,pptp服务端就配置完了,可以使用手机测试一下。

redsocks安装配置

redsocks可以配置linux下的iptables实现TCP连接的重定向功能
项目介绍:http://darkk.net.ru/redsocks/
项目源码:https://github.com/darkk/redsocks

下载编译redsocks

  1. 1$ git clone https://github.com/darkk/redsocks.git 

  2. 2$ cd redsocks 

  3. 3$ sudo apt-get install libevent-dev 

  4. 4$ make 

没有错误的话会生成一个名为redsocks的可执行文件。

新建一个redsocks配置文件redsocks.conf,内容如下:

  1. 1base { 

  2. 2 log_debug = on;  

  3. 3 log_info = on;  

  4. 4 log = "file:/tmp/reddi.log";  

  5. 5 daemon = on;  

  6. 6 redirector = iptables; 

  7. 7} 

  8. 8 

  9. 9redsocks {  

  10. 10 local_ip = 0.0.0.0;  

  11. 11 local_port = 31338;  

  12. 12 ip = 127.0.0.1;  

  13. 13 port = 8899;  

  14. 14 type = socks5;  

  15. 15} 

这里的local_ip, local_port是redsocks服务的监听地址,ip, port为代理的地址,type指定代理类型。

运行redsocks:

  1. 1$ ./redsocks -c redsocks.conf 

因为在配置文件里面指定了后台运行(daemon=on),所以执行以上命令后会直接出现命令行提示符,不会阻塞。

iptables设置

下面是最复杂也是最容易出问题的环节

新建文件ipt.conf,内容如下:

  1. 1*filter 

  2. 2:INPUT ACCEPT 

  3. 3:FORWARD ACCEPT 

  4. 4:OUTPUT ACCEPT 

  5. 5COMMIT 

  6. 6 

  7. 7*nat 

  8. 8:PREROUTING ACCEPT 

  9. 9:INPUT ACCEPT 

  10. 10:OUTPUT ACCEPT 

  11. 11:POSTROUTING ACCEPT 

  12. 12# Create new chain 

  13. 13:REDSOCKS -  

  14. 14 

  15. 15-A PREROUTING -i ppp+ -p tcp -j REDIRECT --to 31338 

  16. 16# -A PREROUTING -i ppp+ -p udp --dport 53 -j DNAT --to 192.168.1.1:53 

  17. 17# -A INPUT -p tcp --dport 1723 -j ACCEPT 

  18. 18# -A INPUT -p tcp --dport 47 -j ACCEPT 

  19. 19# -A INPUT -p gre -j ACCEPT 

  20. 20 

  21. 21# Ignore LANs and some other reserved addresses. 

  22. 22# See http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses 

  23. 23# and http://tools.ietf.org/html/rfc5735 for full list of reserved networks. 

  24. 24-A REDSOCKS -d 0.0.0.0/8 -j RETURN 

  25. 25-A REDSOCKS -d 10.0.0.0/8 -j RETURN 

  26. 26-A REDSOCKS -d 127.0.0.0/8 -j RETURN 

  27. 27-A REDSOCKS -d 169.254.0.0/16 -j RETURN 

  28. 28-A REDSOCKS -d 172.24.0.0/16 -j RETURN 

  29. 29-A REDSOCKS -d 192.168.0.0/16 -j RETURN 

  30. 30-A REDSOCKS -d 224.0.0.0/4 -j RETURN 

  31. 31-A REDSOCKS -d 240.0.0.0/4 -j RETURN 

  32. 32# Anything else should be redirected to port 31338 

  33. 33# -A REDSOCKS -p tcp -o eth0 -j DNAT --to 127.0.0.1:31338 

  34. 34-A REDSOCKS -p tcp -j REDIRECT --to 31338 

  35. 35-A OUTPUT -p tcp -j REDSOCKS 

  36. 36 

  37. 37-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 

  38. 38COMMIT 

是不是很复杂,当然如果你很了解iptables,这就是小菜一碟了。
如果你的系统本身配置了iptables,请根据自身网络情况适当修改。

在上面的配置文件中,有几个方面需要注意:

  1. 如果你在配置vpn时,将dns设置为8.8.8.8和8.8.4.4,且你的系统又无法访问此dns服务器,这时就要设置dns转发了:
  1. 1-A PREROUTING -i ppp+ -p udp --dport 53 -j DNAT --to 192.168.1.1:53 

这里的--to 192.168.1.1:53就是用来设置转发到的dns服务器地址。

  1. 配置中的eth0为系统访问外网的接口,一般情况下为eth0,当有多个接口时会出现eth1, eth2等等,可以通过
    ifconfig命令查看自己使用的是哪个接口。

应用iptable设置:

  1. 1$ sudo iptables-restore < ipt.conf 

执行完以上命令后配置中方的iptables规则就会立即生效了,可以通过以下命令确认:

  1. 1$ sudo iptables-save 

看看输出结果是否与ipt.conf中的一致。

代理配置

可以使用任何标准的https, socks5代理,例如shadowsocks, gost等,客户端的监听地址需要与redsocks配置中的ip, port一致。

OK

DONE!
如果你成功走到了这里,恭喜你,你可以让你的手机,PC无障碍的通过代理全局上网了。

Tagged with 技术 | vpn | 代理 | 翻墙
Time Flies, No Time for Nuts
Copyright © 2020 suziwen
Build with  Gatsbyjs  and  Sculpting theme