生活中,我们可能经常会碰到这三种情况:
- 有一台外网的机器(假设为A),和一台内网的机器(假设为B),且该内网机器能够从外网访问到。我们想要从外网的机器A,借助该内网机器B,访问内网的其他资源。
- 有多台内网机器,且其中只有一台可以访问外网(假设为A),其他机器均只能在内网联通(假设为B-Z)。我们想要从任意一台不能访问外网的机器(比如B),借助可以访问外网的机器A,访问外网资源。
- 科学上网,翻越GFW,这种情况类似于情况(2),A机器是能够访问国外网络的主机,B-Z机器是国内主机,B-Z可以通过A科学上网。其实情况(3)可以算是情况(2)的一种,毕竟我大天朝是个超大局域网= =。。
碰到这样的情况,我们就可以使用vpn来实现,在情况(1)中,我们要在机器B上搭建vpn服务,在情况(2)和情况(3)中,则是在机器A上搭建vpn服务。其他机器通过vpn进行访问即可。
搭建方法
1.安装pptp以提供VPN服务
登录一个可以访问外网的终端,在里面输入1
sudo apt install pptpd
很快就安装好了。
2.对pptpd.conf中的配置信息进行修改
在终端中输入命令,使用vi打开pptpd.conf:1
sudo vi /etc/pptpd.conf
在打开的内容里面找到这两行,并取消掉注释1
2localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
分别为创建vpn时的主机ip和连接vpn的其他主机使用的ip段,可以自行修改。
注意,这里的ip并不是指外网ip或者当前局域网ip,而是指创建VPN(虚拟专用网络)会分配的ip地址。一般这个可以不用修改。
3.修改chap-secrets以分配vpn账号
连接pptp vpn是需要使用账号登陆的,这个账号由我们自己配置。
首先,打开/etc/ppp/chap-secrets1
sudo vi /etc/ppp/chap-secrets
打开之后,我们在文档末尾添加新的账号,格式如下:
用户名 pptpd 密码 *1
username pptpd "password" *
末尾的表示可以使用任意IP连入,如果你要设置指定IP才能连接到vpn,可以将替换成对应的IP。
如果要添加多个账号,只需要换行,然后按照格式继续输入即可。
4.设置vpn的ms-dns
接下来,我们要配置vpn使用的dns,这里,我就碰到了一个大坑,后面说。
首先,我们打开/etc/ppp/pptpd-options1
sudo vi /etc/ppp/pptpd-options
在打开的文档中找到ms-dns,并取消掉注释,并在后面填上适当的dns。
一般来说,内网借助vpn访问外网,只需要在这里填上外网的dns就可以了,比如谷歌的dns8.8.8.8和8.8.4.4(情况(3)这样配置ms-dns就可以了,可以直接到下一步了):1
2ms-dns 8.8.8.8
ms-dns 8.8.4.4
我遇到的坑点就在这里,我填上谷歌的dns是无法访问外网的。崩溃啊,卡了我好久。各种查找资料,以及对学校的校园网的架构进行分析后,发现原因可能如下:
实验室的那台主机并不是直接访问外网,它仍是校园网的各级子网的一部分,它的网络请求是要查找校园网这个局域网内的dns,经过校园网路由发出去的。
于是,我就去找了校园网的dns主机地址,并填入到ms-dns后面,测试一下,问题解决了= =
跟我相同情况的同学,可以去找一下自己学校的dns服务器的地址,并进行更改。
5.开启内核IP转发
在终端里输入:1
sudo vi /etc/sysctl.conf
在打开的文档中找到1
#net.ipv4.ip_forward=1
取消掉注释(即删除行首的#)。
保存之后,在终端中输入命令使我们的修改生效:1
sudo sysctl -p
6.配置iptables
首先,如果没有安装iptables,要先进行安装,安装过的可以跳过:1
sudo apt-get install iptables
接下来,清除iptables里旧的规则(这里针对之前装过pptp,但是没配置好的同学。如果是从我这个教程开始的,并且新装的iptables,这一步可以跳过)。1
2
3
4sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
然后,允许gre协议以及1723端口、47端口:1
2
3sudo iptables -A INPUT -p gre -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT
下一步,开启NAT转发:1
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
注意,上面的eth0是我连接网络的网卡的名称,不同机器这个可能是不一样的。如果不清楚是哪一块网卡联网以及网卡的名称,可以在终端输入ifconfig来查看。
7.重启服务,使我们的配置生效
在终端中输入以下指令重启服务:1
sudo service pptpd restart
这个时候,其他机器使用我们之前配置的账号密码,已经可以连接上VPN,并通过VPN来访问外网了。
8.vpn代理上网慢解决方案
在步骤7完成后,vpn已经可以使用了,但是却可能碰到通过vpn上网网速奇慢的情况,我搭建完就是这样的。碰到这种情况,解决方案如下:
打开终端,输入以下命令
1 | sudo -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356 |
重启vpn服务:1
sudo service pptpd restart