VPN概述
Virtual Private Network (虚拟专用网络)
在公用网络上建立专用私有网络(建立一条隧道,虚拟网卡),进行加密通讯
偶尔可以用于翻墙
一 GRE
优势:比较简单搭建,不需要添加模块
劣势:服务端跟客户端都得是linux系统,不加密不安全
lsmod //查看系统模块列表
modinfo ip_gre //查看模块信息
modprobe ip_gre //添加模块
两台虚拟机
服务器 vpn:eth3:201.1.2.10 eth0:192.168.4.5
客户端配置:
1~ip tunnel help //查看man帮助
2~ip tunnel add tun0 mode gre remote 201.1.2.5 local 201.1.2.10 //添加通道,会有一个虚拟网卡
3~ip link set up tun0 //激活通道
4~ip a a 10.10.10.10/24 dev tun0 //为通道(虚拟网卡)添加ip
5~ip a ls dev tun0 //指定设备查看ip
服务器配置
1~ip tunnel help //查看man帮助
2~ip tunnel add tun0 mode gre remote 201.1.2.10 local 201.1.2.5 //添加通道,会有一个虚拟网卡
3~ip link set up tun0 //激活通道
4~ip a a 10.10.10.5/24 dev tun0 //为通道(虚拟网卡)添加ip
5~ip a ls dev tun0 //指定设备查看ip
[root@client2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
.............................
[root@client2 ~]# ping 192.168.4.5 //网络不可达
[root@client2 ~]# route add -net 192.168.4.0/24 gateway 10.10.10.5 //添加一个不同网段的网关
[root@client2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.4.0 10.10.10.5 255.255.255.0 UG 0 0 0 tun0
....................
[root@client2 ~]# ping 192.168.4.5 //添加网关后可ping通
二 PPTP
点对点隧道
准备环境:两台虚拟机
服务器 vpn:eth3:201.1.2.10 eth0:192.168.4.5
客户机 windows:201.1.2.20
服务器 vpn 机器上操作
装包
yum -y install pptpd-1.4.0-2.el7.x86_64.rpm
改配置文件
rpm -qc pptpd //搜索此包的配置文件 q是查询 c是conf
- /etc/ppp/options.pptpd
- /etc/pptpd.conf
- /etc/sysconfig/pptp
- [root@proxy ~]# vim /etc/pptpd.conf //修改主配置文件
- .. ..
- localip 201.1.2.5 //服务器本地IP
- remoteip 192.168.3.1-50 //分配给客户端的IP池
- vim /etc/ppp/options.pptpd
- require-mppe-128 //使用MPPE加密数据
- ms-dns 8.8.8.8 //DNS服务器
- vim /etc/ppp/chap-secrets //修改账户配置文件
- jacob * 123456 *
- //用户名 服务器标记 密码 客户端
sysctl -a | grep 'ip_forward'
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
echo "1" > /proc/sys/net/ipv4/ip_forward //开启路由转发 默认是1可以不添加
启动服务
systemctl start pptpd
systemctl enable pptpd
netstat -antupl | grep pptp
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 5070/pptpd //pptpd占用端口1723
客户机 windows:201.1.2.20
最后连接网络即可获得ip地址,最后关闭防火墙可以互相ping通
三 L2TP+IPSec VPN
2层隧道协议
准备环境:1 windows主机:网卡桥接public2(201.1.2.20/24)
2 linux主机 vpn:eth0 --192.168.4.200/24 eth3 --201.1.2.200/24
服务器vpn主机部署IPSec服务
1)安装软件包
yum -y install libreswan
2)新建IPSec密钥验证配置文件
- [root@vpn ~]# cat /etc/ipsec.conf //仅查看一下该主配置文件
- include /etc/ipsec.d/*.conf //加载该目录下的所有配置文件 不用修改主配置文件
- [root@vpn ~]# vim /etc/ipsec.d/myipsec.conf
- //新建该文件,参考lnmp_soft/vpn/myipsec.conf
- .............. //left为服务器的,right为客户机
- left=201.1.2.200 //此位置填写服务器ip
3)创建IPSec预定义共享密钥
- root@vpn ~]# vim /etc/ipsec.d/mypass.secrets //新建该文件 文件名无要求,后缀名一定得是secrets
- 201.1.2.200 %any: PSK "randpass" //randpass为密码随意设置后续客户端需要使用 %any为任何客户端
- //201.1.2.200是VPN服务器的IP
4)启动IPSec服务
systemctl restart ipsec
netstat -antupl | grep pluto
部署XL2TP服务
1)安装软件包(软件包参考lnmp_soft)
yum -y install xl2tpd-1.3.8-2.el7.x86_64.rpm
2) 修改xl2tp配置文件(修改3个配置文件的内容
vim /etc/xl2tpd/xl2tpd.conf //修改主配置文件
.............
[lns default]
ip range = 192.168.3.128-192.168.3.254
local ip = 201.1.2.200
require chap = yes
refuse pap = yes
.................
vim /etc/ppp/options.xl2tpd //认证配置
...............
#crtscts //注释这行或者删除
...............
#lock //注释或者删除
..............
require-mschap-v2 //取消注释顶行 强制要求认证
..............
vim /etc/ppp/chap-secrets //修改帐号密码文件
# Secrets for authentication using CHAP
# client server secret IP addresses
test * 123456 *
3)启动服务
systemctl start xl2tpd
netstat -antupl | grep xl2tpd
udp 0 0 0.0.0.0:1701 0.0.0.0:* 5189/xl2tpd //确定已启动占用1701端口
客户端操作
启动一台Windows虚拟机,将虚拟机网卡桥接到public2,配置IP地址为201.1.2.20。
新建网络连接(参考上个客户端操作),输入VPN服务器账户与密码(参考上面客户端操作)。
设置Windows注册表(不修改注册表,连接VPN默认会报789错误),具体操作如下:
- 单击"开始",单击"运行",键入"regedit",然后单击"确定"
- 找到下面的注册表子项,然后单击它:
- HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\Rasman\Parameters
- 在"编辑"菜单上,单击"新建"->"DWORD值"
- 在"名称"框中,键入"ProhibitIpSec"
- 在"数值数据"框中,键入"1",然后单击"确定"
- 退出注册表编辑器,然后重新启动计算机
设置VPN连接的属性,预共享密钥是IPSec配置文件中填写的randpass,具体操作如图所示
NTP(时间同步服务器)
环境:Client(客户机)eth0---192.168.4.100
Proxy(服务器)eth0---192.168.4.5
步骤一:部署NTP服务Proxy
1)安装软件包
yum -y install chrony
rpm -qc chrony
/etc/chrony.conf
/etc/chrony.keys
............
2)修改配置文件
vim /etc/chrony.conf
..............
- server 0.centos.pool.ntp.org iburst //server用户客户端指向上层NTP服务器
- //这里是从网络中的时间同步服务器同步,然后作为服务器,最多可以有十层
- allow 192.168.4.0/24 //允许那个IP或网络访问NTP
- #deny 192.168.4.1 //拒绝那个IP或网络访问NTP
- local stratum 10 //设置NTP服务器的层数量
- .. ..
3)启动NTP服务
systemctl restart chronyd
步骤二:配置客户端Client
1)安装软件包
yum -y install chrony
2) 修改配置文件
vim /etc/chrony.conf
server 192.168.4.5 iburst //设置与哪台时间服务器同步数据 iburst参数设置重启服务后尽快同步时间
3) 将客户端时间修改为错误的时间
date -s "12:12"
date
2018年 05月 12日 星期六 12:12:00 CST
4) 重启chrony与服务器同步时间
systemctl restart chronyd
5) 确认时间是否已经同步
date
2018年 05月 12日 星期六 17:11:16 CST
PSSH提供了一套并发openssh工具
准备环境:主机名 ip地址
client eth0--192.168.4.100
proxy eth0--192.168.4.5
eth3--192.168.2.5
web1 eth3--192.168.2.100
web2 eth3--192.168.2.200
1)安装软件包
[root@proxy ~]# yum install pssh-2.3.1-5.el7.noarch.rpm
2)语法格式
- [root@proxy ~]# man pssh //通过man帮助查看工具选项的作用
- pssh提供并发远程连接功能
- -A 使用密码远程其他主机(默认使用密钥)
- -i 将输出显示在屏幕
- -H 设置需要连接的主机
- -h 设置主机列表文件
- -p 设置并发数量
- -t 设置超时时间
- -o dir 设置标准输出信息保存的目录
- -e dir 设置错误输出信息保存的目录
- -x 传递参数给ssh
[root@proxy ~]# pssh -A -i -H "192.168.4.5 192.168.4.100" -x '-o StrictHostKeyChecking=no' date
[1] 09:48:41 [SUCCESS] 192.168.4.100 //SUCCESS表示成功
2018年 05月 14日 星期一 09:48:41 CST //FAILURE表示失败
[2] 09:48:41 [SUCCESS] 192.168.4.5
2018年 05月 14日 星期一 09:48:41 CST
3)修改[root@proxy ~]# /etc/hosts本地解析文件
192.168.4.100 client
192.168.4.5 proxy
[root@proxy ~]# pssh -A -i -H "proxy client" -x '-o StrictHostKeyChecking=no' date
//-H是指定ip或者域名都行
3)创建主机列表文件
[root@proxy ~]# touch /root/host.txt
[root@proxy ~]# cat /root/host.txt
proxy
client
[root@proxy ~]# pssh -A -i -h /root/host.txt -x '-o StrictHostKeyChecking=no' date
//-h是指定文件里的主机名作为参数
4)设置登陆不需要确认接收密钥
[root@proxy ~]# vim /etc/ssh/ssh_config
35行 -o StrictHostKeyChecking=no
[root@proxy ~]# pssh -A -i -h /root/host.txt date //-x是传递参数给ssh
//改了上面的ssh配置文件可以不需要在远程ssh的时候输入yes/no
4)生成免密钥
[root@proxy ~]#ssh-keygen //生成免密密钥 实现免密码登陆
[root@proxy ~]#ssh-copy-id [email protected] //把公钥传给192.168.4.100
[root@proxy ~]#pssh -i -h /root/host.txt date
//远程不需要密码两端都直接date输出在屏幕上
5)将执行的输出保存到目录下会生成与主机名对应的文件名
[root@proxy ~]#pssh -i -h host.txt -o /opt date //将两端执行的date命令输出结果指定存放到/opt下
[root@proxy ~]#cat /opt/proxy
2018年 05月 14日 星期一 10:53:00 CST
[root@proxy ~]#cat /opt/client
2018年 05月 14日 星期一 10:53:01 CST
6)将本地的etc.tar.gz拷贝到远程的/tmp目录下
[root@proxy ~]# pscp.pssh -h host.txt etc.tar.gz /tmp //前期是有etc.tar.gz
7)将本地的/opt拷贝到远程的/tmp目录下 需要有-r递归选项
[root@proxy ~]# pscp.pssh -r -h host.txt /opt /tmp
8//将/boot存放在当前目录下proxy(主机名目录)/tmp/ 下
[root@proxy ~]# pslurp -r -h host.txt /boot /tmp
9将/boot存放在当前目录下/media/proxy(主机名目录)/tmp/ 下
[root@proxy ~]# pslurp -r -h host.txt -L /media /boot /tmp
// -L 指定存放的目录
10pnuke远程杀死进程
[root@proxy ~]#pnuke -h host.txt sleep //杀死host.txt 里对应主机名了的 sleep进程,前期是都有sleep进程