本文共 7388 字,大约阅读时间需要 24 分钟。
本文以阿里云香港节点的ECS为远程服务器,类型为ecs.t5-lc2m1.nano(CPU使用率不能超过10%,做PPTPD服务器足够了,几乎看不到CPU使用),系统采用Centos6.9,专有网络,按使用量付费,大概一年150块钱,网络带宽不要钱,可以设置大一点,但是香港流量1元/GB。
之所有使用centos6.9系统而不是centos7.5系统,是因为本人对centos7.5系统自带的firewalld防火墙不是很会用,有时间可以出个centos7版本的教程,其实都一样,只是命令格式不同,步骤和原理完全相同。1.登录服务器
使用控制台中对应ECS节点的公网地址登录服务器,登录的ssh验证方式请使用在购买ECS时指定的账号密码或者密钥对。2.更新系统,并安装基本软件包[root@hk ~]# yum update -y[root@hk ~]# reboot更新完成记得重启系统,以让最新的各个组件生效。(其实只要kernel没有升级可以不用重启,看你心情了)3.安装pptpd服务
[root@hk ~]# yum install pptpd4、检查selinux状态
[root@hk ~]# getenforce Disabled[root@hk ~]# cat /etc/sysconfig/selinux #This file controls the state of SELinux on the system.#SELINUX= can take one of these three values:#enforcing - SELinux security policy is enforced.#permissive - SELinux prints warnings instead of enforcing.#disabled - SELinux is fully disabled.SELINUX=disabled#SELINUXTYPE= type of policy in use. Possible values are:#targeted - Only targeted network daemons are protected.#strict - Full SELinux protection.SELINUXTYPE=targetedSELINUX关着就对了,看到这玩意就头大。
5、配置pptpd服务
备份系统自带配置文件[root@hk ~]# mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak新建options.pptpd文件并写入如下对应内容:
[root@hk ~]# vim /etc/ppp/optionsname pptpdrefuse-paprefuse-chaprefuse-mschaprequire-mschap-v2require-mppe-128proxyarplocknobsdcompnovjnovjccompnologfdmtu 1460ms-dns 100.100.2.136ms-dns 100.100.2.138编辑账号密码文件,并添加一个账号,
[root@hk ~]# vim /etc/ppp/chap-secrets #Secrets for authentication using CHAP#client server secret IP addresseszhouxin pptpd testing123 *其中zhouxin为账户名,server字段为pptpd服务类型,固定参数无需修改,secret字段为密码testing123, IP addresses为允许客户端使用该账号从哪些地址登录,可以指定一个IP地址,也可以使用*号,代表允许客户端从所有地址登录。
别忘了开启pptpd服务
[root@hk ~]# service pptpd start Starting pptpd: [ OK ]至此pptpd服务已经配置完成,接下来需要配置iptables允许转发和阿里云的安全组。
6、配置iptables服务在配置iptables之前还需要对linux内核做个特别的设置,开启内核数据包转发功能。编辑配置文件/etc/sysctl.conf找到net.ipv4.ip_forward参数,值由0修改为1,如果配置文件里找不到,就在文件末尾手动添加该参数。#Controls IP packet forwardingnet.ipv4.ip_forward = 11表示允许内核转发,0为禁止内核转发配置完毕后使用如下名利刷新系统参数,以使之生效。[root@hk ~]# sysctl -pnet.ipv4.ip_forward = 1....省略其他.......看到上面的信息代表内和参数修改生效了。OK,接下来才是iptables
[root@hk ~]# service iptables statusiptables: Firewall is not running.发现阿里云的ECS默认是不开启iptables防火墙的,因为ECS的安全组在充当外部防火墙的功能,但是功能和iptables还是有差距的。接下来需要开启iptables服务,并清空netfliter和nat表[root@hk ~]# service iptables start[root@hk ~]# iptables -F[root@hk ~]# iptables -t nat -F在这里需要使用ifconfig命令查看一下网卡的接口名称
[root@hk ~]# ifconfigeth0 Link encap:Ethernet HWaddr 00:16:3E:02:EF:0D inet addr:172.31.159.46 Bcast:172.31.159.255 Mask:255.255.240.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:34258 errors:0 dropped:0 overruns:0 frame:0TX packets:14558 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:26007734 (24.8 MiB) TX bytes:1164403 (1.1 MiB)lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)发现本机的网卡接口名为eth0。写入iptables规则:
[root@hk ~]# iptables -I INPUT -p tcp --dport 1723 -j ACCEPT[root@hk ~]# iptables -I INPUT -p gre -j ACCEPT[root@hk ~]# iptables -I FORWARD -j ACCEPT[root@hk ~]# iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE这4句话的含义分别是:允许tcp 1723端口,这个是pptpd服务的端口。允许GRE协议,pptp服务在建立×××隧道时会用到GRE协议。允许转发外部数据包。对所有经由eth0接口转发出去的数据包进行源地址NAT(SNAT),NAT方式为MASQUERADE伪装,就是把所有经由eth0出去的数据包源IP地址都修改为eth0接口上所配置的IP地址,也就是172.31.159.46。可能有人要问这个eth0接口的地址也是私有地址,无法再公网上路由,怎么办,勿操心,因为在数据包到达阿里云的专有网络网观后还需要再做一次NAT,来转换为真正的公网IP地址。至此,已iptables已经配置完毕,记得使用如下命令保存,否则重启后上述配置将失效。
[root@hk ~]# service iptables save所有的配置信息将会被保存到文件/etc/sysconfig/iptables中。还没完,前面说了还要配置阿里云的安全组,
在阿里云控制台,找到该ECS服务器,点击最后面的"更多",再点击弹出列表上的"安全组配置"选项。来到一个新的配置页面,点击"安全组列表"后面的"配置规则"连接。添加如下规则:允许tcp1723端口,允许GRE协议,允许tcp22端口(这个是自带规则,切记不要删除,否则你就无法ssh访问你的ECS了)。 好了,所有pptpd服务的相关设置均已就绪。接下来在你的客户端电脑上配置一个×××连接,使用该ECS的公网地址作为×××的服务器地址,账号密码位前面设置的zhouxin,testing123。
控制面板->网络与共享中心->设置新的连接或网络->连接到工作区->否,创建新连接(如果有的话)->使用我的Internet连接(×××)->Internet地址就是ECS的公网地址,目标名称可以随便去比如hk***->点击创建按钮完成配置。还没完,再次进入网络共享中心->更改适配器设置->找到刚刚新建的连接比如:hk***那个网络接口->鼠标右键,选择属性->选择"安全"选项卡安全选项如下:×××类型:点对点隧道协议(pptp)数据加密:可选加密(没有加密也可以连接)身份验证:允许使用这些协议->只勾选 Microsoft CHAP Version 2(MS-CHAP v2)点击确定按钮保存配置双击此网络接口,在弹出的页面填入账号密码,点击连接按钮,等待与服务器协商建立×××连接。如果一切正常,过片刻此网络接口状态会由已断开->正在连接(正在连接到"ECS IP",正在验证你的登录信息,正在完成连接)->已连接。
激动人心的时刻来临了,赶快打开浏览器,输入网址www.baidu.com,搜索关键字ip来查看自己的网络出口地址是不是变成了ECS的公网IP。
额........,郁闷中,百度打不开,换个www.qq.com再试试,发现没问题,挺顺溜,再换个地址ip.qq.com看看,发现自己的互联网出口地址确实变成了ECS的公网IP。但是百度为什么打不开呢,郁闷中。曾经在很长的一段时间里我本人竟然认为国内打不开google,理所当然的境外的运营商都去屏蔽了百度。呵呵,有点傻是不是。指导有一天觉得这种情况太无法忍受了,才决定找点资料看看究竟是怎么回事。在回到ECS服务器上看看网络信息
[root@hk ~]# ifconfigeth0 Link encap:Ethernet HWaddr 00:16:3E:02:EF:0D inet addr:172.31.159.46 Bcast:172.31.159.255 Mask:255.255.240.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:42366 errors:0 dropped:0 overruns:0 frame:0TX packets:22787 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:27355920 (26.0 MiB) TX bytes:2506666 (2.3 MiB)lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)ppp0 Link encap:Point-to-Point Protocol
inet addr:10.10.10.1 P-t-P:10.10.10.3 Mask:255.255.255.255UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1RX packets:28 errors:0 dropped:0 overruns:0 frame:0TX packets:17 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:3 RX bytes:1675 (1.6 KiB) TX bytes:1120 (1.0 KiB)发现比之前多了一个ppp0接口,地址就是我们前面pptpd服务里所配置的localip地址,仔细看ppp0里面的一个关键参数MTU:1396,看到了没有,再看看eth0的mtu:1500,问题就出在这里。由于ppp封装,gre封装,和tcp-mss等诸多因素混杂,导致无法正常由https协议访问百度。解决办法1:tcp-mss自适应。[root@hk ~]# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu或[root@hk ~]# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1356解决办法2:降低eth0的MTU到1496以下即可。[root@hk ~]# ifconfig eth0 mtu 1496解决办法3:提升ppp接口的mtu到1400以上[root@hk ~]# vim /etc/ppp/ip-up............省略N行..........ifconfig $1 mtu 1460exit 0注意一定要添加在exit 0这行前面。前两种方法是当即生效的。对pptpd服务没影响。
如果是更改配置文件方式记得重启pptpd服务。
[root@hk ~]# service pptpd restart Shutting down pptpd: [ OK ]Starting pptpd: [ OK ]Warning: a pptpd restart does not terminate existing connections, so new connections may be assigned the same IP address and cause unexpected results. Use restart-kill to destroy existing connections during a restart.好了,现在baidu是可以打开了,但是依然发现个问题,就是被墙掉的那些网站还是无法打开,
来,再做个测试在命令提示符里输入nslookup命令,C:\Users\xin>nslookup默认服务器: public1.114dns.comAddress: 114.114.114.114可以看到一个默认服务器是114.114.114.114,经检查发现这是本地网卡上配置的首选DNS服务器,貌似pptpd里配置的ms-dns参数没生效。系统依然使用本地网卡的DNS服务器去做解析。难不成每次使用此***连接都要手动的更改本地网卡的DNS设置,断开连接,在手动改回来?是的曾经的我是这么做的,但是做了一段时间就受够了。决定找个懒人的方法,别说,还真找到了。在ECS配置如下iptables规则:[root@hk ~]# iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 100.100.2.138:53这条规则的意思是:对所有发往udp53端口的数据做目的地址转换DNAT,目的地址强制更改为100.100.2.138,这下好了,无论客户端那边配置什么DNS,当DNS数据包到达ECS是都被篡改成使用100.100.2.138这个DNS服务器。哪怕客户端配置的压根就不是DNS服务器的IP地址,也一样会被篡改掉。赶快在试试,打开浏览器,先念三遍咒语:玛尼玛尼哄,玛尼玛尼哄,玛尼玛尼哄!即可穿墙而过。
这样认为大功告成了是吗,真的是吗?当然不是,iptables还没保存呢
[root@hk ~]# service iptables save然后
然后就是过了两天你会收到阿里云这么个邮件,怎么办,随它去,然后等请喝茶。
转载于:https://blog.51cto.com/singrui/2118560