2021年6月

部署 - 证书
现有的教程多半使用编译方式来安装 ocserv,实际上 EPEL 源中已经包含了这个包,而且还是最新的,因此只需要安装 EPEL 在安装 ocserv 即可
执行以下命令即可:

yum install epel-release -y
yum install ocserv -y

现有的教程还有另一个坑,都是教你使用 certtool 生成自签名证书来使用的;如果你不想被中间人攻击的话,最好别这么干
事实上有效的证书很容易获得,以前介绍过的 Let's Encrypt 就是很可靠的一个签发机构
如果你还不知道如何获取 Let's Encrypt 的证书,你可以参考此文章:https://e2c.net/2019/08/24/160.html

获取到证书后,你需要将证书复制进 /etc/ocserv/ssl 这个文件夹(其他文件夹也可以,记得改配置文件就行),没有的话用以下命令创建

mkdir -p /etc/ocserv/ssl
cd /etc/ocserv/ssl

完成后的 /etc/ocserv/ssl 目录应该是这样的:

部署 - 配置文件
完成证书配置之后,下一步就是对配置文件进行修改
默认情况下,配置文件位于 /etc/ocserv/ocserv.conf,以下的配置字段需要重点关注

*# 将验证方式设为用户名+密码

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

*# TCP/UDP端口,默认为443

tcp-port = 443
udp-port = 443

*# 在上一步中添加的证书,请根据实际情况自行修改

server-cert = /etc/ocserv/ssl/server-cert.pem
server-key = /etc/ocserv/ssl/server-key.pem

*# 最大连接数

max-clients = 20

*# 每个用户的最大设备数

max-same-clients = 3

*# MTU自动配置,不是True的话会奇慢无比

try-mtu-discovery = true

*# 很多教程没有提及的点,默认是会启用TLS1.0的
*# 还有RSA类无前向保密的算法,为了安全起见
*# 此配置只启用了TLS1.2和128位以上具有前向保密的算法

tls-priorities = "SECURE128:+SECURE256:-VERS-ALL:+VERS-TLS1.2"

*# 默认域名,建议设置位前一步中证书签发的域名

default-domain = ocserv.xxx.com

*# 网段信息:建议修改以避免域现有网段冲突

ipv4-network = 172.31.0.0
ipv4-netmask = 255.255.255.0

*# 路由信息:此配置位绕过局域网

route = 0.0.0.0/192.0.0.0
route = 64.0.0.0/192.0.0.0
route = 128.0.0.0/192.0.0.0
route = 192.0.0.0/192.0.0.0
no-route = 192.168.0.0/255.255.0.0

之后需要创建一个新用户,使用以下命令

ocpasswd -c /etc/ocserv/ocpasswd iclart

输入两遍密码即可,此时 /etc/ocserv 目录结构应该如下图:

部署 - 系统配置
完成 ocserv 的配置文件编辑后,我们需要对系统进行一些配置
首先,需要开启 IPv4 转发

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

使配置生效

sysctl -p

其次需要对转发进行配置

*# 启动 firewalld

systemctl start firewalld

*# 放通端口,注意修改

firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=443/udp

*# 转发配置,注意将 eth0 修改位你的网卡接口

firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -o eth0 -j MASQUERADE

*# 使配置生效

firewall-cmd --reload

确定没有问题之后,就可以启动 ocserv 了

systemctl enable ocserv
systemctl start ocserv

启动后执行此命令,应该得到类似输出

netstat -tunlp | grep 443

至此,服务端配置已全部完成,在配置客户端时,注意服务器应该填写域名

原文链接:原文 原文2

有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动,

现在要添加该参数怎么办呢,方法有二:

1、Docker 命令修改

docker container update --restart=always 容器名字

2、直接改配置文件

首先停止容器,不然无法修改配置文件

配置文件路径为:/var/lib/docker/containers/容器ID

在该目录下找到一个文件 hostconfig.json ,找到该文件中关键字 RestartPolicy

修改前配置:"RestartPolicy":{"Name":"no","MaximumRetryCount":0}

修改后配置:"RestartPolicy":{"Name":"always","MaximumRetryCount":0}

最后启动容器。

修改docker容器的挂载路径

停止所有docker容器

sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

停止docker服务

sudo service docker stop

修改mysql路径

cd ~
sudo cp -r mysql/ /home/server/

备份容器配置文件

cd /var/lib/docker/containers/de9c6501cdd3
cp hostconfig.json hostconfig.json.bak
cp config.v2.json config.v2.json.bak

修改hostconfig的冒号前的配置路径

vi hostconfig.json

"Binds": ["/home/server/mysql/conf/my.cnf:/etc/mysql/my.cnf", "/home/server/mysql/logs:/logs", "/home/server/mysql/data:/mysql_data"],

修改config的Source的配置路径
复制代码

vi config.v2.json

       "MountPoints": {

              "/etc/mysql/my.cnf": {

                     "Source": "/home/server/mysql/conf/my.cnf",

                     "Destination": "/etc/mysql/my.cnf",

                     "RW": true,

                     "Name": "",

                     "Driver": "",

                     "Relabel": "",

                     "Propagation": "rprivate",

                     "Named": false,

                     "ID": ""

              },

              "/logs": {

                     "Source": "/home/server/mysql/logs",

                     "Destination": "/logs",

                     "RW": true,

                     "Name": "",

                     "Driver": "",

                     "Relabel": "",

                     "Propagation": "rprivate",

                     "Named": false,

                     "ID": ""

              },

              "/mysql_data": {

                     "Source": "/home/server/mysql/data",

                     "Destination": "/mysql_data",

                     "RW": true,

                     "Name": "",

                     "Driver": "",

                     "Relabel": "",

                     "Propagation": "rprivate",

                     "Named": false,

                     "ID": ""

              },

              "/var/lib/mysql": {

                     "Source": "",

                     "Destination": "/var/lib/mysql",

                     "RW": true,

                     "Name": "85d91bff7012b57606af819480ce267449084e81ab386737c80ace9fe75f6621",

                     "Driver": "local",

                     "Relabel": "",

                     "Propagation": "",

                     "Named": false,

                     "ID": "897cd0152dd152166cb2715044ca4a3915a1b66280e0eb096eb74c2d737d7f77"

              }

       },

复制代码
启动docker服务

 sudo service docker start

启动所有docker容器

sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)


修改docker默认的存储位置

docker 的所有images及相关信息存储位置为:/var/lib/docker

查看默认的docker存储路径

docker info |grep 'Docker Root Dir'
WARNING: No swap limit support
Docker Root Dir: /var/lib/docker

停止所有docker容器

sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

停止docker服务

sudo service docker stop
cd /var/lib

打包docker目录

sudo tar -czvf /usr/docker.tar.gz docker/
cd /usr/
sudo tar -xzvf docker.tar.gz

修改docker默认的存储位置

sudo vim /etc/docker/daemon.json

{
    "graph": "/home/server/docker"
}

启动docker服务

sudo service docker start

启动所有docker容器

sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

查看修改后docker存储路径

docker info |grep 'Docker Root Dir'
WARNING: No swap limit support
Docker Root Dir: /usr/docker