centos7快速搭建VPN
最近公司业务服务器内存占用居高不下,于是打算再购置一台服务器降低单服务器的负载。
于是购买了一台阿里云ECS,考虑到只是用于减轻负载,只需要内网交互,于是就没有勾选公网ip。
购置之后,用过反向代理ssh登录了该ECS,使用yum命令安装了常用软件docker、lrzsz,顺利安装成功,但是安装docker-compose时,用的是curl,一直都下载不下来,我以为时网速问题,就用我自己的电脑下载下来然后通过rz上传到服务器了。然后配置docker仓库,由于仓库跟这台ecs在同一个内网,也都一切顺利,镜像也拉下来了。接着启动nginx-proxy,发现进度条一直保持在0%,于是我ping www.baidu.com
,dns解析成功但无法ping通。瞬间懵了我。。。
我以为没有公网ip只是没有独立ip,但是ecs内部是能够访问互联网的。还是太年轻了。
简单的思考了一下,阿里云虽然提供了NAT网关等解决方案,但我不想买单,决定使用VPN技术解决访问公网的问题。
先在虚拟机中搭建了一遍,折腾了半天,终于测试通过,搭建步骤如下:
1、安装 ppp pptpd iptables
ppp
数据链路层协议pptpd
VPN服务类型之一iptables
防火墙,用来消息转发
yum install -y ppp pptpd iptables iptables-services redhat-lsb
安装成功之后查看系统版本信息
2、配置 ppp DNS信息
首先查看阿里云当前的dns配置
cat /etc/resolv.conf
把DNS配置到pptpd的配置文件中
vi /etc/ppp/options.pptpd
这个dns是提供给客户端使用的,恰好客户端也都是同一内网的机子,所以使用这个DNS是没问题的,如果你是用来科学上网,那就使用8.8.8.8
和8.8.4.4
吧。
3、配置 ppp VPN账号信息
vi /etc/ppp/chap-secrets
用以下格式添加用户名和密码:
用户名 pptpd 密码 允许登录的ip
4、配置 pptpd为客户端分配的ip地址段
vi /etc/pptpd.conf
取消下面这两行的注释
5、配置内核支持转发
检查内核是否支持转发
sysctl -a | grep net.ipv4.ip_forward
如果结果中存在
net.ipv4.ip_forward = 1
则是已开启,该值等于0或者不存在,则需要编辑sysctl.conf
配置文件开启
vi /etc/sysctl.conf
修改net.ipv4.ip_forward = 0
为net.ipv4.ip_forward = 1
若没有则添加至文件末尾,然后重新加载内核配置
sysctl -p
重启一下pptpd
服务
systemctl restart pptpd
systemctl status pptpd
到此为止,VPN已经可以连接成功了,但无法上网,如果无法连接成功,可能是安全组没有放行1723端口或者GRE协议,请先排查至能够连接成功再继续。
6、配置 iptables
iptables -F
#清空默认所有规则
iptables -X
#清空自定义所有规则
iptables -Z
#计数器置0
#放行所有请求
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT
#放行相关协议
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#配置转发,注意网卡eth0不要填错
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300
#保存以上配置的规则
service iptables save
#重启服务
systemctl restart iptables.service
systemctl restart pptpd.service
#配置开机启动
systemctl enable iptables.service
systemctl enable pptpd.service
#查看防火墙规则
iptables -L -n
7、在没有公网ip的服务器连接VPN
#安装相关工具
yum install -y ppp pptp pptp-setup
#创建VPN连接并启动
pptpsetup --create 连接名称 --server ip地址 --username 用户名 --password 密码 --start
#如果报以下错误
Using interface ppp0 Connect:
ppp0 <--> /dev/pts/3 CHAP authentication succeeded LCP terminated by peer (MPPE required but peer refused) Modem hangup
#解决方法
vi /etc/ppp/peers/连接名
#在文件尾部,加上以下内容
require-mppe-128
#连接VPN
pppd call 连接名
#连接成功后,添加默认路由
route add -net 0.0.0.0 dev ppp0
如果顺利,到此就可上网了。
可以编辑/etc/ppp/ip-up
文件,在exit 0
之前加入
route add default dev $1
即可免去每次连接vpn后配置路由的操作
参考博客:
阿里云ECS架设VPN过程总结
centos pptp 客户端 连接vpn
腾讯云centOS搭建VPN设置iptables的NAT能登录QQ但是不能浏览网页的问题