星期六休息,没事又开始折腾那台vps了,上周在上面安装了shadowsocks和vsftpd,一直开着就没动过了,ss代理需要单独安装客户端,只能寻找另一种方案代替了。
PPTP
点对点隧道协议(PPTP)是一种实现虚拟专用网络的方法。 PPTP使用用于封装PPP数据包的TCP及GRE隧道控制通道
PPTP可以应用到几乎所有的操作系统,无需安装任何软件。
部署环境:
硬件平台:vps,基于kvm虚拟化,512MB Memory
OS:CentOS 6.8
网络:eth0 45.76.210.222
验证内核是否加载MPPE模块
[[email protected] ~]# modprobe ppp-compress-18 && echo is ok
is ok
[[email protected] ~]#
安装所需的依赖包
[[email protected] ~]# yum install ppp
安装pptpd
[[email protected] ~]# yum install pptpd
说明:如果所使用的yum源中没有pptpd,就手动去下载该软件包或者包含该软件包的源
[[email protected] software]# wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.4.0-1.el6.x86_64.rpm
如果报错找不到路径,就需要手动进该网站,可能路径有所改动。
我把源和该软件包都下载了
[[email protected] software]# ls
pptpd-1.4.0-1.el6.x86_64.rpm pptp-release-4-7.rhel6.noarch.rpm
[[email protected] software]# rpm -ivh pptpd-1.4.0-1.el6.x86_64.rpm
ppp配置:
配置ppp,一个option文件/etc/ppp/options.pptpd,一个用户账户文件
[[email protected] software]# grep -vE "^#|^ *$" /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 108.61.10.10
ms-dns 8.8.8.8
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
说明:该文件就加两条ms-dns就可以了,可以写你所使用网络运营商默认的DNS
[[email protected] software]# cat /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
xjh pptpd 123456 *
test pptpd 123456 *
说明:VPN客户的用户名、服务名称、密码和IP地址范围,每行一个账户:
pptpd配置:
[[email protected] software]# grep -vE "^#|^ *$" /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
localip 10.0.1.100
remoteip 10.0.1.101-111
说明:该配置文件就添加localip和remoteip两个参数就好了,localip为服务端的ip段,我暂且理解为网关,remoteip暂且理解为分配给客户端的ip段。这两项都可以分配多个ip。
注意:这两个IP段不能有重合。
开启系统内核的IP转发功能:
[[email protected] software]# grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 0
该参数默认为0,将该参数设置为1
net.ipv4.ip_forward = 1
使该参数修改生效:
[[email protected] software]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv6.conf.all.accept_ra = 2
net.ipv6.conf.eth0.accept_ra = 2
设置pptpd开机自启动:
[[email protected] software]# chkconfig --level 35 pptpd on
做到这里基本顺利,没遇到什么问题,在防火墙配置的过程中出现了一点小问题,很久没写防火墙了,基本忘的差不多了,自己不断填坑。
防火墙配置:
因为直接在公网IP上做的,所以防火墙的策略是关闭所有,开启所需,因为做了代理,OUTPUT链就全放开了。
[[email protected] scripts]# cat iptables.sh
#/bin/bash
#清除规则
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#设定规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#开启常用服务端口
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 300 --hitcount 5 -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
#开启端口转发
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 10.0.1.0/24 -i eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j SNAT --to-source 45.76.210.222
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -s 10.0.1.0/24 -j TCPMSS --set-mss 1400
/etc/init.d/iptables save
该防火墙配置,我并不是严格按四表五链的顺序来写的,我是按服务器上开的应用顺序来写的,可能执行效率上会有点问题,这个问题后续完善。
说明:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j SNAT --to-source 45.76.208.222(这是vps公网IP)
这一条也可以写成:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE (这种写法主要应用于无固定公网IP,直接让它自动获取访问外网的IP作为源IP。比如有些拨号上网,公网IP经常会变动)
写完上面这一条规则基本算是完成了,可以在客户端访问了
客户端连接能上google了,但是却不能访问baidu,一脸懵逼,这什么鬼????
查找原因,看日志。。。。。
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -s 10.0.1.0/24 -j TCPMSS --set-mss 1400
这一条我查了很久才找到这种写法,主要很多网络方面的知识体系不全,钻了很多牛角尖,被百度坑的不要不要的,这里就不详写了。
这里面涉及到不同系统平台下MTU值不一样
查找相关知识
http://deferrable28.rssing.com/browser.php?indx=14833347&last=1&item=10
http://blog.csdn.net/inthat/article/details/17403829
写在最后,本来会的东西,很久不用就会变得很陌生,最后渐渐就不会使用了,以后有空还是多写写博客。