ArchLinux上安装ocserv

1.使用任何途径生成证书,推荐使用letsencrypt

cp vpn.xxx.xyz.pem /etc/ssl/certs/vpn.xxx.xyz/
cp vpn.xxx.xyz.key /etc/ssl/certs/vpn.xxx.xyz/

2.配置

修改配置文件/etc/ocserv/ocserv.conf
主要有下列属性需要修改

// 登录登录
auth = "plain[passwd=/etc/ocserv/passwd]"
// 证书登录
auth = "certificate"

// 上面的方法需要同时启用证书和密码,下面的是让用户选择任何之一就行
enable-auth = "plain[passwd=/etc/ocserv/passwd]"
auth = "certificate"

#tcp和udp端口
tcp-port = 6433
udp-port = 6433

#运行用户和组
run-as-user = ocserv
run-as-group = ocserv

# chroot模式运行
chroot-dir = /var/lib/ocserv

#证书路径
server-cert = /etc/ocserv/ssl/vpn.xxx.xyz.pem
server-key = /etc/ocserv/ssl/vpn.xxx.xyz.key

# 用户信任根证书,这样用户可以使用证书登录
ca-cert = /etc/ocserv/ssl/ca-cert.pem
# 下面这行一定要保持,不能修改
cert-user-oid = 0.9.2342.19200300.100.1.1

# 用户空间隔离
isolate-workers = true

# 最多多少用户同时登陆
max-clients = 128
# 同一个用户最多同时登陆数
max-same-clients = 10

# 注册连接的用户
use-utmp = true

# 启用外部控制工具
use-occtl = true

# 打开所有的dns转发
tunnel-all-dns = true

# DNS, 不太方便,最好是重新搭建bind
dns = 8.8.8.8
dns = 8.8.4.4

# 分配给VPN客户端的IP段
ipv4-network = 172.16.10.0
ipv4-netmask = 255.255.255.0

# 不同vpn的lan是否可见
expose-iroutes = false

# 用户和组的单独配置
config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

# 开启路由管理指令
route-add-cmd = "ip route add %{R} dev %{D}"
route-del-cmd = "ip route delete %{R} dev %{D}"

# 用户配置文件,思科客户端需要
user-profile = /etc/ocserv/profile.xml

#注释掉route的字段,这样表示所有流量都通过 VPN 发送
#route = 192.168.1.0/255.255.255.0
#route = 192.168.5.0/255.255.255.0
cisco-client-compat = true

3.启动服务

#创建用户
ocpasswd -c /etc/ocserv/passwd [username]

#创建用户配置文件夹
mkdir -p /etc/ocserv/{config-per-group,config-per-user}

#启用NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#或者
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -o ens3 -j MASQUERADE

#关闭IPv6
nano -w /etc/sysctl.d/40-ipv6.conf
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1

# 打开bbr
nano -w /etc/sysctl.d/40-ipv6.conf
net.core.default_qdisc=cake
net.ipv4.tcp_congestion_control=bbr

#开启IP转发
nano -w /etc/sysctl.d/99-forward.conf
net.ipv4.ip_forward=1

# Enables Proxy ARP on all interfaces
net/ipv4/conf/all/proxy_arp = 1

# Enables Proxy ARP on a specific interface (Replace "interfacename"
# with your interface, eg.eth0, eth0.100, wlan0, etc.)
#net/ipv4/conf/eth0/proxy_arp = 1

# 使更改生效
sysctl -p /etc/sysctl.d/40-ipv6.conf
sysctl -p /etc/sysctl.d/99-forward.conf
systemctl start ocserv

# 允许外部进栈
firewall-cmd --zone=public --add-port=4443/tcp --permanent
firewall-cmd --zone=public --add-port=4443/udp --permanent
firewall-cmd --reload
# 或者
iptables -A INPUT -p tcp --dport 4443 -j ACCEPT
iptables -A INPUT -p udp --dport 4443 -j ACCEPT

4.连接测试

/usr/sbin/ocserv --debug 1 --pid-file /var/run/ocserv.pid --config /etc/ocserv/ocserv.conf

5.客户端命令行

wget http://git.infradead.org/users/dwmw2/vpnc-scripts.git/blob_plain/4deaaf9a32:/vpnc-script
echo “password” | openconnect ssh.itseeker.net:4443 -i vpn-abaord –no-cert-check –script /lib/netifd/vpnc-script -u zeno –passwd-on-stdin

6.限速

要在 ocserv 中实现限速,你可以使用 Token Bucket 算法。Token Bucket 是一种常用的算法,用于限制数据传输速率。在 Token Bucket 算法中,桶里存放着一定数量的令牌,每个令牌代表一定量的可用带宽。当客户端发送数据时,会从桶中取出一个或多个令牌,然后将数据发送出去。如果桶中的令牌数量不足,客户端就必须等待,直到有足够的令牌可用。

在 ocserv 的配置文件中,添加以下配置项来配置限速参数:

token_bucket_mbps = 10

这个参数指定了 Token Bucket 桶的大小,以兆比特每秒(Mbps)为单位。这将限制每个连接的传输速率为 10 Mbps。

7.限制设备数

要在 ocserv 中限制连接到 VPN 的设备数,你可以使用 max-same-clients 选项。这个选项指定了允许同时连接到 VPN 的相同客户端数量。当超过这个数量时,新的连接请求将被拒绝。

打开 ocserv 的配置文件(通常是 /etc/ocserv/ocserv.conf),添加或修改以下行:

max-same-clients = 5

这个示例中,max-same-clients 被设置为 5,表示同一客户端最多允许同时连接 5 个设备。

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在Linux分类目录。将固定链接加入收藏夹。