CentOS7 ocserv 改进

1. 概述

这次针对ocserv的改进有以下几点

  • 将系统内核升级为4.12.0,并启用TCP BBR算法
  • 使用了letsencrypt证书进行验证
  • 开启了IPv6 NAT

2. 内核升级

安装ELRepo并安装4.12.0内核

1
2
3
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

确认安装结果

1
rpm -qa | grep kernel

查看grep启动条目

1
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

结果应该如下

1
2
3
4
5
CentOS Linux 7 Rescue c486a2d8573d8743bacb692cb5a100b7 (4.12.0-1.el7.elrepo.x86_64)
CentOS Linux (4.12.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.22.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-6578274afb594ac69034466264a1d02c) 7 (Core)

设置开启启动为1,因为从顺序0开始的,所以4.12.0内核启动的顺序为1,然后重启机器

机器启动后,启用BBR

1
2
3
4
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo sysctl net.ipv4.tcp_available_congestion_control

确认结果

1
sudo sysctl -n net.ipv4.tcp_congestion_control

输出结果应该为bbr


3. letsencrypt证书

如何获取letsencrypt证书以及自动续期,在其他文章中已经介绍,不再赘述

修改/etc/ocserv/ocserv.conf, 如下,其中xxx.com为服务器的域名

1
2
server-cert = /etc/letsencrypt/live/xxx.com/fullchain.pem
server-key = /etc/letsencrypt/live/xxx.com/privkey.pem

重启ocserv服务即可,客户端导入letsencrypt根证书,则客户端登录的时候,不会出现不信任根证书的提示。


4. IPv6 NAT

4.12.0内核支持ip6tables NAT。修改/etc/ocserv/ocserv.conf, 如下

1
2
ipv6-network = fdda::/64
ipv6-subnet-prefix = 80 ipv6-dns = 2001:4860:4860::8888
  • ipv6-network指定为任意私有IPv6地址段,不要指定与全球可路由前缀2001::/3以及本地链路fe80::/10地址范围内
  • ipv6-subnet-prefix要大于ipv6-network的前缀长度
  • 可以添加ipv6-dns 字段

开启ip6tables的转发

1
2
ip6tables -t nat -A POSTROUTING -s fdda::/64 -o eth0 -j MASQUERADE
ip6tables-save > /etc/sysconfig/ip6tables

注意,请删除ip6tables中FORWARD链中默认条目,该条目阻止一切IPv6转发


5. 问题

  • 客户端无法访问六维

修订版本信息

修订版本 时间 备注
文档创建 2017/7/13 10:06

参考