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.88.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 = 0net.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但是不能浏览网页的问题

评论