OpenVPN
简介
此法用于多个客户端通过OpenVPN服务器实现内网访问
OpenVPN服务器操作系统CentOS-7.7
OpenVPN版本2.4.11
easy-rsa版本3.0.8
使用tap模式
客户端IP地址池10.8.0.0/24
多个客户端直接可以通过OpenVPN实现内网通信内核调优:
# 修改系统参数:
cat > /etc/sysctl.d/99-net.conf <<EOF
# 二层的网桥在转发包时也会被iptables的FORWARD规则所过滤
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 关闭严格校验数据包的反向路径,默认值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# 设置 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576
# 端口最大的监听队列的长度
net.core.somaxconn=21644
# TCP阻塞控制算法BBR,Linux内核版本4.9开始内置BBR算法
#net.ipv4.tcp_congestion_control=bbr
#net.core.default_qdisc=fq
# 打开ipv4数据包转发
net.ipv4.ip_forward=1
# TCP FastOpen
# 0:关闭 ; 1:作为客户端时使用 ; 2:作为服务器端时使用 ; 3:无论作为客户端还是服务器端都使用
net.ipv4.tcp_fastopen=3
EOF
# 修改limits参数:
cat > /etc/security/limits.d/99-centos.conf <<EOF
* - nproc 1048576
* - nofile 1048576
EOF安装
安装epel源:
yum -y install epel-*
更新软件:
yum makecache
yum update -y
安装openvpn及easy-rsa
yum -y install openvpn easy-rsa iptables-services
参考文档:
https://www.linuxprobe.com/centos7-config-openvpn-one.html
https://www.linuxprobe.com/centos7-config-openvpn-two.html证书配置:
复制文件:
拷贝easy-rsa的文件到/etc/openvpn下
cp -r /usr/share/easy-rsa/3.0.8 /etc/openvpn/easy-rsa
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars
修改/etc/openvpn/easy-rsa/vars配置:
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Guang Dong"
set_var EASYRSA_REQ_CITY "Shen Zhen"
set_var EASYRSA_REQ_ORG "kfidc"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "kf"
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 365000
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_CERT_RENEW 180
set_var EASYRSA_CRL_DAYS 60
初始化PKI和CA
切换目录:
cd /etc/openvpn/easy-rsa
创建PKI
./easyrsa init-pki
创建CA
./easyrsa build-ca nopass
创建服务器证书
方式一:
./easyrsa build-server-full openvpn-server nopass #自动签发公钥和私钥
方式二:
./easyrsa gen-req openvpn-server nopass # 创建服务器密钥
./easyrsa sign-req server openvpn-server # 用CA证书签署密钥
创建客户端证书
方式一:
./easyrsa build-server-full openvpn-client nopass
方式二:
./easyrsa gen-req openvpn-client nopass # 创建服务器密钥
./easyrsa sign-req client openvpn-client # 用CA证书签署密钥
创建DH证书
./easyrsa gen-dh # 根据在顶部创建的vars配置文件生成密钥
创建ta.key
openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
生成CRL密钥:
./easyrsa gen-crl
拷贝证书
mkdir -p /etc/openvpn/pki
cp /etc/openvpn/easy-rsa/pki/ca.crt \
/etc/openvpn/easy-rsa/pki/dh.pem \
/etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt \
/etc/openvpn/easy-rsa/pki/private/openvpn-server.key \
/etc/openvpn/pki/
ln -sv /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/pki/crl.pem
chown -R root:openvpn /etc/openvpn/pki
复制ca证书,ta.key和server端证书及密钥到/etc/openvpn/server文件夹里
cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-server.key /etc/openvpn/server/
cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/server/
复制ca证书,ta.key和client端证书及密钥到/etc/openvpn/client文件夹里
cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-client.crt /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-client.key /etc/openvpn/client/
cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/client/
复制dh.pem , crl.pem到/etc/openvpn/client文件夹里
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/client/
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/client/
OpenVPN配置
创建日志目录:
mkdir -p /var/log/openvpn
chown -R openvpn:openvpn /var/log/openvpn
创建客户端配置目录
mkdir -p /etc/openvpn/client/{config,user}
chown -R root:openvpn /etc/openvpn/client/{config,user}
配置OpenVPN服务器端
cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server/
vim /etc/openvpn/server/server.conf
# 路径根据实际情况修改,一般情况下服务启动失败都是因为证书的原因
# 监听地址
#local 0.0.0.0
# 监听端口
port 1194
# 通信协议
proto tcp
# TUN模式还是TAP模式
dev tap
# 证书
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/openvpn-server.crt
key /etc/openvpn/pki/openvpn-server.key
dh /etc/openvpn/pki/dh.pem
crl-verify /etc/openvpn/pki/crl.pem
# 禁用OpenVPN自定义缓冲区大小,由操作系统控制
sndbuf 0
rcvbuf 0
# TLS rules “client” | “server”
#remote-cert-tls "client"
# TLS认证
tls-auth /etc/openvpn/pki/ta.key 0
# TLS最小版本
#tls-version-min "1.2"
# 重新协商数据交换的key,默认3600
#reneg-sec 3600
# 在此文件中维护客户端与虚拟IP地址之间的关联记录
# 如果OpenVPN重启,重新连接的客户端可以被分配到先前分配的虚拟IP地址
ifconfig-pool-persist /etc/openvpn/ipp.txt
# 配置client配置文件
client-config-dir /etc/openvpn/client/config
# 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。
server 10.8.0.0 255.255.255.0
# 配置网桥模式,需要在OpenVPN服务添加启动关闭脚本,将tap设备桥接到物理网口
# 假定内网地址为192.168.0.0/24,内网网关是192.168.0.1
# 分配192.168.0.200-250给VPN使用
#server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.250
# 给客户端推送自定义路由
#push "route 192.168.0.0 255.255.255.0"
# 所有客户端的默认网关都将重定向到VPN
push "redirect-gateway def1 bypass-dhcp"
# 向客户端推送DNS配置
push "dhcp-option DNS 223.5.5.5"
#push "dhcp-option DNS 223.6.6.6"
# 允许客户端之间互相访问
client-to-client
# 限制最大客户端数量
max-clients 100
# 客户端连接时运行脚本
#client-connect ovpns.script
# 客户端断开连接时运行脚本
#client-disconnect ovpns.script
# 保持连接时间
keepalive 20 120
# 开启vpn压缩
comp-lzo
# 允许多人使用同一个证书连接VPN,不建议使用,注释状态
duplicate-cn
# 运行用户
user openvpn
#运行组
group openvpn
# 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源
persist-key
persist-tun
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
# 显示当前的连接状态
status /var/log/openvpn/openvpn-status.log
# 日志路径,不指定文件路径时输出到控制台
# log代表每次启动时清空日志文件
# log /var/log/openvpn/openvpn.log
# log-append代表追加写入到日志文件
log-append /var/log/openvpn/openvpn.log
# 日志级别
verb 6
# 忽略过多的重复信息,相同类别的信息只有前20条会输出到日志文件中
mute 20
explicit-exit-notify 1配置文件示例
[root@iZd7oawrdmsm8dagsrrr1xZ ~]# cat /etc/openvpn/server/server.conf |grep '^[^#|^;]'
port 1194
proto udp
dev tun
ca ca.crt
cert openvpn-server.crt
key openvpn-server.key # This file should be kept secret
dh dh.pem
crl-verify crl.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 103.201.25.21"
push "dhcp-option DNS 114.114.114.114"
client-to-client
max-clients 100
duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 6
mute 20
explicit-exit-notify 1防火墙配置
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --add-interface=tun0 # vpn网卡名
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE # IP地址为vpn网卡监听的网段,ens33指的是你上网的网卡名称
firewall-cmd --reload服务启动
systemctl enable openvpn-server@server
systemctl start openvpn-server@server
systemctl status openvpn-server@server
netstat -tlunp | grep openvpn客户端配置
# 复制配置文件模板
cp -p /usr/share/doc/openvpn-2.4.*/sample/sample-config-files/client.conf /etc/openvpn/client/
# 修改后的内容如下
[root@localhost client]# cat client.conf |grep '^[^#|^;]'
client
dev tun
proto udp
remote 192.168.43.138 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert openvpn-client.crt
key openvpn-client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 6
# 更改client.conf文件名为client.ovpn
mv /etc/openvpn/client/client.conf /etc/openvpn/client/client.ovpnmv client/client.conf client/client.ovpn
# 安装lrzsz工具,通过sz命令把 client.tar.gz传到客户机上面
[root@localhost openvpn]# yum -y install lrzsz
# 打包client文件夹
[root@localhost openvpn]# tar -zcvf client.tar.gz client/
# 注:若安装完成后客户端连接没有办法上网,可能是防火墙关闭导致流量无法转换
openvpn --daemon --cd /etc/openvpn/client/43.249.28.50/ --config client.ovpn --log-append /var/log/openvpn/43.249.28.50.log --auth-nocache && ifconfig
openvpn --daemon --cd /etc/openvpn/client/106.14.213.94/ --config client.ovpn --log-append /var/log/openvpn/106.14.213.94.log --auth-nocache && ifconfig
openvpn --daemon --cd /etc/openvpn/client/110.92.67.180/ --config client.ovpn --log-append /var/log/openvpn/110.92.67.180.log --auth-nocache && ifconfig
openvpn --daemon --cd /etc/openvpn/client/208.90.122.143/ --config client.ovpn --log-append /var/log/openvpn/208.90.122.143.log --auth-nocache && ifconfig
openvpn --daemon --cd /root/client/ --config client.ovpn --log-append /var/log/openvpn/110.92.67.180.log --auth-nocache
--daemon:后台运行
--cd:切换路径
--config: 指定配置文件
--log-append:指定日志
--auth-nocache:自动认证参考模板
[root@iZd7oawrdmsm8dagsrrr1xZ client]# cat client.conf |grep '^[^#|^;]'
client
dev tun
proto udp
remote 8.208.83.52 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert openvpn-client.crt
key openvpn-client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 6
mute 20
status client-status.logOpenVPN连接后无法ssh
由于OpenVPN连接成功以后,默认所有的流量全部走vpn隧道了,所以会导致ssh连接失败
可以使用ip route命令查询出默认网关信息,如:
[root@server client]# ip route
0.0.0.0/1 via 10.7.0.5 dev tun1
default via 172.19.111.253 dev eth0
10.7.0.0/24 via 10.7.0.5 dev tun1
10.7.0.5 dev tun1 proto kernel scope link src 10.7.0.6
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
116.7.99.162 via 172.19.111.253 dev eth0
128.0.0.0/1 via 10.7.0.5 dev tun1
169.254.0.0/16 dev eth0 scope link metric 1002
172.19.96.0/20 dev eth0 proto kernel scope link src 172.19.103.197
default via x.x.x.x dev eth0 x.x.x.x即默认网关
然后将你本机的公网ip添加进路由,走默认网关
route add -host 106.14.213.94 gw 43.249.28.33
route add -host 208.90.122.143 gw 43.249.28.33
route add -host 103.201.25.2 gw 172.19.111.253
route add -host 116.7.99.162 gw 172.19.111.253
route add -host 43.249.28.50 gw 172.19.111.253
route add -host 208.90.122 gw 172.19.111.253
route add -host 106.14.213.94 gw 208.90.122.129
route add -host 43.249.28.50 gw 208.90.122.129
route -n
查看本机IP:
https://api.myip.la/cn?jsonOpenVPN负载均衡
方案一:
两个相同的server,一个client配置文件
两个相同ca,配置文件(local ip不同)的server
在配置文件中配置两个参数和多个ip
在拨号连接的时候client随机选择客户端,在VPNserver宕机的情况下自动重连其他机器
修改客户端的配置文件
remote server1.mydomain #负载均衡server
remote server2.mydomain
remote-random #使用负载均衡
resolv-retry #重连时间
方案二:DNS轮询
两个相同ca,配置文件(local ip不同)的server
在配置文件中配置两个参数并将IP指向域名
通过DNS轮询A记录实现负载均衡
CentOS7内核升级
一、升级前操作
1. 查看当前内核版本
uname -r
2.安装ELRepo源
(1) 导入公共秘钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
(2) 安装 ELRepo 的 YUM 源
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
二、安装内核
1. 通过 YUM 安装
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist # 载入元数据
yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel* # 查看可用包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y # 删除旧版本工具包
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml kernel-ml-tools
默认安装 mainline 版本(主线版本)。
lt :long term support,长期支持版本;
ml:mainline,主线版本;
2. 查看已安装的内核版本
rpm -qa kernel*
3. 查找新安装的内核完整名称
cat /boot/grub2/grub.cfg | grep menuentry
三、内核切换
0. 前实际启动顺序
grub2-editenv list
1. 更改默认内核
命令2选1:
(1) grub2-set-default 0
默认启动顺序应该为1,升级后内核是往前面插入,为0。
grub2-set-default 0
(2) grub2-set-default '新内核‘
grub2-set-default 'CentOS Linux (5.4.120-1.el7.elrepo.x86_64) 7 (Core)'
2. 查看默认启动内核是否更换成功
grub2-editenv list
四、激活内核
1. 重启系统
reboot
2. 查看内核版本
uname -rIPSec VPN
参考文件:
https://github.com/hwdsl2/setup-ipsec-vpnFRRouting安装
官方文档:
http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-centos7.html
安装依赖包:
yum -y install git autoconf automake libtool make \
readline-devel texinfo net-snmp-devel groff pkgconfig \
json-c-devel pam-devel bison flex pytest c-ares-devel \
python-devel systemd-devel python-sphinx libcap-devel \
elfutils-libelf-devel
yum源安装:
# add RPM repository on CentOS 7
FRRVER="frr-stable"
curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el7.noarch.rpm
yum -y install ./$FRRVER*
# install FRR
yum -y install frr frr-pythontools
源码编译安装:
添加frr组和用户
sudo groupadd -g 92 frr
sudo groupadd -r -g 85 frrvty
sudo useradd -u 92 -g 92 -M -r -G frrvty -s /sbin/nologin \
-c "FRR FRRouting suite" -d /var/run/frr frr
下载源代码,对其进行配置和编译
git clone https://github.com/frrouting/frr.git frr
cd frr
./bootstrap.sh
./configure \
--bindir=/usr/bin \
--sbindir=/usr/lib/frr \
--sysconfdir=/etc/frr \
--libdir=/usr/lib/frr \
--libexecdir=/usr/lib/frr \
--localstatedir=/var/run/frr \
--with-moduledir=/usr/lib/frr/modules \
--enable-snmp=agentx \
--enable-multipath=64 \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--enable-systemd=yes \
--disable-exampledir \
--disable-ldpd \
--enable-fpm \
--with-pkg-git-version \
--with-pkg-extra-version=-MyOwnFRRVersion \
SPHINXBUILD=/usr/bin/sphinx-build
make
make check
sudo make install
创建空的FRR配置文件
sudo mkdir /var/log/frr
sudo mkdir /etc/frr
sudo touch /etc/frr/zebra.conf
sudo touch /etc/frr/bgpd.conf
sudo touch /etc/frr/ospfd.conf
sudo touch /etc/frr/ospf6d.conf
sudo touch /etc/frr/isisd.conf
sudo touch /etc/frr/ripd.conf
sudo touch /etc/frr/ripngd.conf
sudo touch /etc/frr/pimd.conf
sudo touch /etc/frr/nhrpd.conf
sudo touch /etc/frr/eigrpd.conf
sudo touch /etc/frr/babeld.conf
sudo chown -R frr:frr /etc/frr/
sudo touch /etc/frr/vtysh.conf
sudo chown frr:frrvty /etc/frr/vtysh.conf
sudo chmod 640 /etc/frr/*.conf
安装守护程序配置文件
sudo install -p -m 644 tools/etc/frr/daemons /etc/frr/
sudo chown frr:frr /etc/frr/daemons
启用ip转发:
vim /etc/sysctl.d/90-routing-sysctl.conf
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
sysctl -p /etc/sysctl.d/90-routing-sysctl.conf
安装frr服务
sudo install -p -m 644 tools/frr.service /usr/lib/systemd/system/frr.service
注册系统文件
sudo systemctl preset frr.service
启动
sudo systemctl enable frr
sudo systemctl start frr
FRRouting组网
vim /etc/frr/daemons
启用ospfd,设为on
systemctl enable frr.service
systemctl start frr.service
netstat -anp | grep ospfd
echo "net.ipv4.conf.all.forwarding=1">>/etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1">>/etc/sysctl.conf
sysctl -p
[root@localhost ~]# vtysh
Hello, this is FRRouting (version 7.5.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
localhost.localdomain# configure terminal
localhost.localdomain(config)# router ospf
localhost.localdomain(config-router)# network 10.7.0.0/24 area 0
localhost.localdomain(config-router)# network 10.8.0.0/24 area 0
localhost.localdomain(config-router)# network 10.9.0.0/24 area 0
localhost.localdomain(config-router)# do write file
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Configuration saved to /etc/frr/zebra.conf
Configuration saved to /etc/frr/ospfd.conf
Configuration saved to /etc/frr/staticd.conf
localhost.localdomain(config-router)#
systemctl restart frr
show running-config # 查看当前frr配置信息
show interface brief # 查看当前设备所有接口信息
show ip route # 查看路由表
CentOS7安装docker
# 安装yum工具类
yum install -y yum-utils device-mapper-persistent-data lvm2
# 启动docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
yum install docker-ce
# 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://gziwmbaz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerCentOS7安装MySql
# 下载安装包
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# 运行安装包
yum -y install mysql57-community-release-el7-10.noarch.rpm
# 安装数据库
yum -y install mysql-community-server
# 启动服务
systemctl start mysqld.service
# 使用默认密码进入数据库
grep "password" /var/log/mysqld.log
mysql -uroot -p
# 修改密码,注意密码复杂度要求
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 授权远程访问
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
# 刷新权限
flush privileges;
# MySQL默认源在国外,如果在国内连接的话,可能会特别慢,这个时候可以去官网下载别人打包好的tar包,解压安装即可
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
tar xvf mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
yum -y install ./mysql-community-*
systemctl start mysqld.service
最后更新于