本文适用于Centos7
和RHEL8
.
Ocserv
也就是OpenConnect
,即Cisco AnyConnect
的兼容服务端
。
参考地址:https://www.jesse.top/2018/07/13/Linux-Service/centos7%20搭建Anyconnect%20VPN/
https://bynss.com/codes/299985.html
源码:https://github.com/omaidb/qiaofei_notes/blob/main/shell_code/ocserv/install_ocserv.sh
# 下载脚本
https://raw.githubusercontent.com/omaidb/qiaofei_notes/main/shell_code/ocserv/install_ocserv.sh
# 执行脚本
bash install_ocserv.sh
仅适用于已绑定域名的主机
# 安装certbot主程序
sudo dnf install certbot -y
# 检查版本号
certbot --verion
前置条件
:该服务器公网ip已经设置域名解析,crerboot版本
要在2.0
以上。
# 申请公网证书
## certonly:获取证书,但不要安装它。
## --standalone:使用独立插件获取证书,会启动certbot内置http服务器
## --preferred-challenges http:执行http-01质询以使用端口80验证域。
## --agree-tos:同意加密使用条款。
## --email:证书的电子邮件地址将用于帐户注册和恢复。
## -d:指定域名。
certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d .example.com
vim /etc/sysctl.d/ocserv.conf
# 关闭OOM
vm.panic_on_oom = 1
# 自动释放cache防止oom
vm.overcommit_memory = 1
# 开启内核开启数据包转发
net.ipv4.ip_forward = 1
net.ipv4.tcp_timestamps = 0
# 自动MTU
net.ipv4.tcp_mtu_probing = 1
# 启用TCP窗口缩放
net.ipv4.tcp_window_scaling = 1
# 减少数据包传输的延迟和处理时间
net.ipv4.tcp_low_latency = 1
# 开启快速tcp
net.ipv4.tcp_fastopen = 3
# 连接结束时保存TCP连接信息,能提高性能,但会导致无法进行网络分析
net.ipv4.tcp_no_metrics_save = 1
# 设置 SYN+ACK 的重试次数。推荐值为 2。
## 默认值为5
net.ipv4.tcp_synack_retries = 2
# 设置SYN的重试次数。推荐值为2
## 默认值为6
net.ipv4.tcp_syn_retries = 2
# 当TCP连接队列溢出时,启用rst复位以通知客户端
net.ipv4.tcp_abort_on_overflow = 1
# 将TCP连接空闲时发送KeepAlive消息的时间间隔设置为300秒(5分钟)
## 默认是7200秒(2小时)
net.ipv4.tcp_keepalive_time = 300
# 设置TCP keepalive探测的次数,推荐值为 5。
## 默认值为9
net.ipv4.tcp_keepalive_probes = 5
# 设置TCP keepalive探测的时间间隔。推荐值为15
## 默认值为75
net.ipv4.tcp_keepalive_intvl = 15
# 孤儿连接重试次数
## 默认值是0(8次),调整为3次
net.ipv4.tcp_orphan_retries = 3
# 在接收UDP和TCP数据包时使用L3协议信息进行过滤,可以减少不必要的数据包。
net.ipv4.udp_l3mdev_accept = 1
net.ipv4.tcp_l3mdev_accept = 1
# 减少重传
net.ipv4.tcp_sack = 1
# 对sack的改进,能够检测不必要的重传
net.ipv4.tcp_dsack = 1
# 指定Fair Queuing 公平队列调度器
net.core.default_qdisc = fq
# 启用BBR
net.ipv4.tcp_congestion_control = bbr
# 禁用反向路径过滤(Reverse Path Filtering)以允许数据包通过不同网络接口进行转发
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.ens3.rp_filter = 0
# 禁止发送 ICMP 重定向消息,防止路由器发送重定向消息给主机
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 禁止接收 ICMP 重定向消息,防止主机接收到来自路由器的重定向消息
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 向 FORWARD 链添加一条规则,以允许从 IP 地址为 10.89.64.0/24 的源主机发起的流量进行转发
## -A FORWARD:将规则添加到 FORWARD 链的末尾。-A 表示添加规则,FORWARD 表示规则将被添加到 FORWARD 链上;
## -s 10.89.64.0/24:匹配源 IP 地址为 10.89.64.0/24 的流量。-s 参数用于指定匹配的源 IP 地址;
## -j ACCEPT:将匹配的流量接受并允许通过。-j 参数用于指定对匹配的流量执行的操作,此处为 ACCEPT,即接受并允许通过。
iptables -A FORWARD -s 10.89.64.0/24 -j ACCEPT
# 向NAT表的POSTROUTING链添加规则,将源地址10.89.64.0/24流量进行NAT转换,并使用出口IP地址作为源地址进行转发。
## -t nat:指定操作 NAT 表。
## -A POSTROUTING:将规则添加到 POSTROUTING 链的末尾。
## -s 10.89.64.0/24:匹配源 IP 地址为 10.89.64.0/24 的流量。
## -j MASQUERADE:将匹配的流量进行 NAT 转换,并使用出口网卡 eth0 的 IP 地址作为源地址进行转发。
iptables -t nat -A POSTROUTING -s 10.89.64.0/24 -o eth0 -j MASQUERADE
# 查看iptables的filter表配置
iptables -nL
# 查看nat表的配置
iptables -t nat -nL
# 将src为192.168.1.100的所有出站流量的DSCP值更改为46
iptables -t mangle -A OUTPUT -p tcp -s 10.89.64.0/24 -j DSCP --set-dscp 46
# 将src为192.168.1.100的所有出站流量的DSCP值更改为46
iptables -t mangle -A OUTPUT -p udp -s 10.89.64.0/24 -j DSCP --set-dscp 46
# 保存配置
service iptabels save
# 先备份配置文件
mv /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.bak && touch /etc/ocserv/ocserv.conf
# 编辑空的配置文件
vim /etc/ocserv/ocserv.conf
将下列内容复制粘贴到
/etc/ocserv/ocserv.conf
文件中,注意修改default-domain
的值为你的服务器地址或域名
https://wwww.lvmoo.com/1084.love/
# 设置独立认证
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
cert-user-oid = 0.9.2342.19200300.100.1.1
# 仅使用TLS1.2以上版本
#tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"
## NORMAL:表示将使用默认的密码套件,这些密码套件被认为是安全的且被广泛支持。
## %SERVER_PRECEDENCE:指定服务器密码套件的偏好将优先于客户端的偏好。
## %COMPAT:包括提供与旧系统兼容性的密码套件。
## +SECURE256:包括使用 256 位密钥进行加密的密码套件。
## -VERS-ALL:默认禁用所有 TLS 版本。
## +VERS-TLS1.2: 启用 TLS 版本 1.2
## +VERS-TLS1.3:启用 TLS 版本 1.3。
## +VERS-DTLS1.2:启用数据报传输层安全协议(DTLS)版本 1.2。
## +COMP-DEFLATE:启用使用 Deflate 算法的压缩。
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:+SECURE256:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:+VERS-DTLS1.2:+COMP-DEFLATE"
# 设置服务器监听端口
tcp-port = 443
udp-port = 443
# 程序以哪个用户和组运行
run-as-user = ocserv
run-as-group = ocserv
# socket文件
socket-file = ocserv.sock
chroot-dir = /var/lib/ocserv
# 默认证书配置
server-cert = /etc/pki/ocserv/public/server.crt
server-key = /etc/pki/ocserv/private/server.key
# 开启lz4压缩
compression = true
# 小于多少的流量不压缩
no-compress-limit = 256
# 隔离工作,默认不动
isolate-workers = true
# 最大客户端数量,0表示无限数量
max-clients = 16
# 同一用户可以同时登陆的客户端数量
max-same-clients = 5
# 限速毫秒?默认不动
rate-limit-ms = 100
# 服务器统计重置时间,不动
server-stats-reset-time = 604800
# 保活心跳,掉线检测,默认32400s(9小时)
## 增大耗电,减少掉线
keepalive = 64
# 启用MTU发以优化性能
try-mtu-discovery = true
## dpd和mobile-dpd客户端活跃检测(秒),延迟高可以设小点,否则可能会断流
dpd = 90
# 设为30分钟(秒),设小了也会断流
mobile-dpd = 1800
## DTLS超时1年则由UDP模式切换至TCP模式
switch-to-tcp-timeout = 31536000
# switch-to-tcp-timeout = 25
# 空闲断开时间,如果想无限期连接,注释这两行
# idle-timeout=1200
# mobile-idle-timeout=2400
# 认证超时时间
auth-timeout = 240
# 最小重新认证时间
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
# 设置协议定义的优先级(SO_PRIORITY)的数据包发送。从0到6,其中0是最低,6最高
net-priority = 6
device = NFSC
# 生成的IP是否可以预测,IP保持,尽可能为同一用户使用相同的ip
predictable-ips = true
# 在从IP池中租用任何IP之前先ping以验证其没有被占用
ping-leases = true
# 默认域名,修改为你的域名或ip地址
# default-domain = www.mydoamin.com
# 配置自定义私有IP地址范围,注释默认的两行
ipv4-network = 10.70.25.0
ipv4-netmask = 255.255.255.0
# 以VPN隧道传输所有DNS查询
tunnel-all-dns = true
# 更改DNS服务器(国内服务器就填写国内dns)
dns = 1.0.0.1
dns = 8.8.4.4
# 是否支持低于7.08版本以下的cisco的VPN客户端
cisco-client-compat = true
# 开启证书和密码均可认证
## 开启首选验证机制为证书认证
auth = "certificate"
## 开启备用认证"enable-auth"为密码认证
enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
# 开启密码和证书均可认证
### 开启首选验证机制为密码认证
#auth = "plain[passwd=/etc/ocserv/ocpasswd]"
### 开启证书备用认证"enable-auth"
#enable-auth = "certificate"
# 设置服务器监听端口
tcp-port = 443
# udp端口可以自定义,tcp只用于拨通,拨通后会使用指定的udp端口
udp-port = 443
# 程序以哪个用户和组运行
# 图省事也可以使用nobody用户和daemon组
run-as-user = ocserv
run-as-group = ocserv
# socket文件
socket-file = ocserv.sock
# ocserv工作目录
chroot-dir = /var/lib/ocserv
# 证书认证不支持这个选项,注释掉这行
#listen-clear-file = /var/run/ocserv-conn.socket
# ocserv服务端证书配置
## 服务端证书
server-cert = /etc/ocserv/server_ssl/ocserv_server-cert.pem
## 服务端私钥
server-key = /etc/ocserv/server_ssl/ocserv_server-key.pem
# CA证书路径,如果是证书验证则需要开启这个参数,如果是密码认证,则注释掉
ca-cert = /etc/ocserv/root_ssl/ca-cert.pem
# Diffie-Hellman parameters,增强非对称加密算法在协商对称加密算法密码时的安全性
dh-params = /etc/ocserv/server_ssl/dh.pem
# 吊销证书路径
#crl = /etc/ocserv/revoked_ssl/crl.pem
# 开启lz4压缩
compression = true
# 小于多少的流量不压缩
no-compress-limit = 256
# 隔离工作,默认不动
isolate-workers = true
# 最大客户端数量,0表示无限数量
max-clients = 16
# 同一用户可以同时登陆的客户端数量,0表示无限数量
max-same-clients = 5
# 限速毫秒?默认不动
rate-limit-ms = 100
# 服务器统计重置时间,不动
server-stats-reset-time = 604800
# 当服务器接收到来自代理的连接时,比如 haproxy--高可用
## 支持代理协议,设置此项以获得正确的客户地址。然后将预期代理协议在
## TCP 或 UNIX 套接字(不是 UDP 套接字)。虽然两个 v1和v2版本的代理协议都支持,推荐v2版本,因为它在解析中更有效。
#listen-proxy-proto = true
# 保活心跳,掉线检测,默认32400s(9小时)
## 增大耗电,减少掉线
keepalive = 64
# 启用MTU发以优化性能(DPD 必须启用)
try-mtu-discovery = true
## dpd和mobile-dpd客户端活跃检测(秒),延迟高可以设小点,否则可能会断流
dpd = 90
# 设为30分钟(秒),设小了也会断流
mobile-dpd = 1800
# 强制DTLS
# https://www.v2ex.com/t/460243
# https://www.v2ex.com/t/158768?p=3
## 使用最新的ocserv版本,最近几个更新都对DTLS连接有优化
## DTLS超时1年则由UDP模式切换至TCP模式
switch-to-tcp-timeout = 31536000
# 缓冲区大小,小值延时低,大值带宽高
output-buffer = 2
# 空闲断开时间,如果想无限期连接,注释这两行
## 无流量断开超时(秒),超过这个时间无流量则断开. Unset to disable.
# idle-timeout=1200
## 移动端无流量断开超时(秒),超过这个时间无流量则断开. Unset to disable.
# mobile-idle-timeout=2400
#默认注释,客户端将在持续连接此时间后断开连接,其cookie将失效(即,将需要重新认证)。
#session-timeout = 86400
# 手机熄屏后自动重连
persistent-cookies = true
# cert-user-oid = 0.9.2342.19200300.100.1.1
# 确保服务器正确读取用户证书(后面会用到用户证书)
cert-user-oid = 2.5.4.3
# 执行完全向前保密,更多配置在
# https://zhuanlan.zhihu.com/p/515265589
# http://gnutls.org/manual/html_node/Priority-Strings.html
## %SERVER_PRECEDENCE:指定服务器密码套件的偏好将优先于客户端的偏好
## +SECURE256:包括使用 256 位密钥进行加密的密码套件。
## -VERS-ALL:默认禁用所有 TLS 版本。
## +VERS-TLS1.3:启用 TLS 版本 1.3。
## +VERS-DTLS1.2:启用数据报传输层安全协议(DTLS)版本 1.2。
## +CHACHA20-POLY1305: 表示启用ChaCha20-Poly1305加密算法
## +COMP-DEFLATE:启用使用 Deflate 算法的压缩。
tls-priorities = "%SERVER_PRECEDENCE:+SECURE256:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:+VERS-DTLS1.2:+CHACHA20-POLY1305:+COMP-DEFLATE"
# 认证超时时间
auth-timeout = 240
# 最小重新认证时间
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200
# 此 cookie 在用户连接期间保持有效,并且在用户断开连接后,在该配置设置的时间内保持有效状态。
## 该设置用于允许在不同网络之间漫游,1小时(秒)内有效
cookie-timeout = 36000
# 是否拒绝漫游,如果为true则cookie仅限于单个 IP 地址,不能从不同的 IP 重复使用。
## false为允许漫游
deny-roaming = false
# ReKey time (in seconds)
# ocserv 将要求客户端在经过此秒数后定期刷新密钥。 设置为零以禁用
## (请注意,如果禁用 rekey,某些客户端会连接失败)。28800秒=8小时
rekey-time = 28800
# ReKey 方式
# Valid options: ssl, new-tunnel
# ssl: 将在通道上执行有效的重新握手,从而在重新生成密钥期间实现无缝连接。
# new-tunnel: 将指示客户端断开并重新建立VPN。 仅当连接的客户端对 ssl 选项有问题时才使用此选项.
rekey-method = ssl
# 是否启用对 occtl 工具的支持 (i.e., either through D-BUS, or via a unix socket).
use-occtl = true
# 设置协议定义的优先级(SO_PRIORITY)的数据包发送。从0到6,其中0是最低,6最高
net-priority = 6
# 虚拟网卡名称
device = NFSC
# 欢迎语--登录时会提示,建议注释掉
# banner = "Welcome"
# 使用监听主机来限制特定IP地址或一所提供的IP地址
listen-host = 0.0.0.0
# 被通告的默认域名,修改为你的域名或ip地址
# default-domain = www.mydoamin.com
# 配置自定义私有IP地址范围,注释默认的两行
ipv4-network = 10.89.64.0
ipv4-netmask = 255.255.255.0
# 以VPN隧道传输所有DNS查询
tunnel-all-dns = true
# 更改DNS服务器(国内服务器就填写国内dns)
# 建议本机适用dnsmasq自建dns后填写网关地址,加快dns响应
# dns = 服务器的内网ip
dns = 1.0.0.1
dns = 8.8.4.4
# 生成的IP是否可以预测,IP保持,尽可能为同一用户使用相同的ip
predictable-ips = true
# 在从IP池中租用任何IP之前先ping以验证其没有被占用
ping-leases = true
# 路由,列出地址的流量将走通道
## 如果不设置或配置为default则全部流量均走
#route = default
# 如果要推全局路由 建议使用如下两条记录--https://blog.ihipop.com/2014/07/4782.html
## 下面两行是所有的局域网路由和广播路由不走--但是iPhone客户端会显示已暂停
# route = 0.0.0.0/128.0.0.0
# route = 128.0.0.0/128.0.0.0
# 局域网不走
# route = 10.0.0.0/8
# route = 172.16.0.0/12
# route = 192.168.0.0/16
#route = fd00::/8
# 是否支持低于7.08版本以下的cisco的VPN客户端
## cisco-client-compat=true意味着禁用dtls-legacy = true
## 设置false会连不上dtls
cisco-client-compat = true
# 此选项允许运维人员禁用旧版 DTLS 协商 ,默认为开启的,fasle为禁用旧版DTLS
dtls-legacy = true
# 高级选项
## 一般不设置自定义请求头
## 常规 头名称:x-forwarded-for 头内容:8.8.8.8
# custom-header = "X-DTLS-MTU: 1420"
# custom-header = "X-CSTP-MTU: 1420"
# 防止网页被嵌入到其他网站的iframe中
custom-header = X-Frame-Options: DENY
# 跨站点脚本(XSS)保护
custom-header = X-Content-Type-Options: nosniff
# 向服务器声明前置机的IP地址
custom-header = x-forwarded-for: 1.0.0.1
# dtls和tls使用同一密码信息,必须依赖dtls-legacy = false
## 开启会导致连不上服务器---一定要注释掉
# match-tls-dtls-ciphers = true
# 这个文件必须可以从worker的chroot中访问。
# 请注意,不建议启用此选项,因为它会允许worker进程打开任意文件(当isolate-workers=true)
# profile文件路径/var/lib/ocserv/profile.xml
#user-profile = profile.xml
项目地址:https://github.com/CNMan/ocserv-cn-no-route
no-route
对AnyConnect
客户端无效
。
# 下载配置文件
wget -c https://raw.githubusercontent.com/CNMan/ocserv-cn-no-route/master/cn-no-route.txt
no-route-china
列表
no-route = 1.160.0.0/255.224.0.0
no-route = 1.192.0.0/255.224.0.0
no-route = 5.182.60.0/255.224.0.0
no-route = 14.0.0.0/255.224.0.0
no-route = 14.96.0.0/255.224.0.0
no-route = 14.128.0.0/255.224.0.0
no-route = 14.192.0.0/255.224.0.0
no-route = 27.0.0.0/255.192.0.0
no-route = 27.96.0.0/255.224.0.0
no-route = 27.128.0.0/255.128.0.0
no-route = 36.0.0.0/255.192.0.0
no-route = 36.96.0.0/255.224.0.0
no-route = 36.128.0.0/255.128.0.0
no-route = 39.0.0.0/255.224.0.0
no-route = 39.64.0.0/255.192.0.0
no-route = 39.128.0.0/255.192.0.0
no-route = 40.64.0.0/255.192.0.0
no-route = 42.0.0.0/255.0.0.0
no-route = 43.128.0.0/255.128.0.0
no-route = 45.0.0.0/255.128.0.0
no-route = 45.128.0.0/255.224.0.0
no-route = 45.224.0.0/255.224.0.0
no-route = 47.64.0.0/255.192.0.0
no-route = 49.0.0.0/255.128.0.0
no-route = 49.128.0.0/255.224.0.0
no-route = 49.192.0.0/255.192.0.0
no-route = 52.80.0.0/255.224.0.0
no-route = 52.130.0.0/255.224.0.0
no-route = 54.222.0.0/255.224.0.0
no-route = 57.176.0.0/255.224.0.0
no-route = 58.0.0.0/255.128.0.0
no-route = 58.128.0.0/255.224.0.0
no-route = 58.192.0.0/255.192.0.0
no-route = 59.32.0.0/255.224.0.0
no-route = 59.64.0.0/255.192.0.0
no-route = 59.128.0.0/255.128.0.0
no-route = 60.0.0.0/255.192.0.0
no-route = 60.160.0.0/255.224.0.0
no-route = 60.192.0.0/255.192.0.0
no-route = 61.0.0.0/255.192.0.0
no-route = 61.64.0.0/255.224.0.0
no-route = 61.128.0.0/255.192.0.0
no-route = 61.224.0.0/255.224.0.0
no-route = 62.0.0.0/255.224.0.0
no-route = 62.234.0.0/255.224.0.0
no-route = 65.111.0.0/255.224.0.0
no-route = 68.79.0.0/255.224.0.0
no-route = 69.224.0.0/255.224.0.0
no-route = 71.128.0.0/255.224.0.0
no-route = 81.68.0.0/255.224.0.0
no-route = 82.156.0.0/255.224.0.0
no-route = 85.209.40.0/255.224.0.0
no-route = 91.224.0.0/255.224.0.0
no-route = 94.191.0.0/255.224.0.0
no-route = 101.0.0.0/255.128.0.0
no-route = 101.128.0.0/255.224.0.0
no-route = 101.192.0.0/255.192.0.0
no-route = 103.0.0.0/255.0.0.0
no-route = 104.160.0.0/255.224.0.0
no-route = 104.192.0.0/255.224.0.0
no-route = 106.0.0.0/255.128.0.0
no-route = 106.224.0.0/255.224.0.0
no-route = 109.224.0.0/255.224.0.0
no-route = 110.0.0.0/254.0.0.0
no-route = 112.0.0.0/255.128.0.0
no-route = 112.128.0.0/255.224.0.0
no-route = 112.192.0.0/255.192.0.0
no-route = 113.0.0.0/255.128.0.0
no-route = 113.128.0.0/255.224.0.0
no-route = 113.192.0.0/255.192.0.0
no-route = 114.0.0.0/255.128.0.0
no-route = 114.128.0.0/255.224.0.0
no-route = 114.192.0.0/255.192.0.0
no-route = 115.0.0.0/255.0.0.0
no-route = 116.0.0.0/255.0.0.0
no-route = 117.0.0.0/255.128.0.0
no-route = 117.128.0.0/255.192.0.0
no-route = 118.0.0.0/255.224.0.0
no-route = 118.64.0.0/255.192.0.0
no-route = 118.128.0.0/255.128.0.0
no-route = 119.0.0.0/255.128.0.0
no-route = 119.128.0.0/255.192.0.0
no-route = 119.224.0.0/255.224.0.0
no-route = 120.0.0.0/255.192.0.0
no-route = 120.64.0.0/255.224.0.0
no-route = 120.128.0.0/255.224.0.0
no-route = 120.192.0.0/255.192.0.0
no-route = 121.0.0.0/255.128.0.0
no-route = 121.192.0.0/255.192.0.0
no-route = 122.0.0.0/254.0.0.0
no-route = 124.0.0.0/255.0.0.0
no-route = 125.0.0.0/255.128.0.0
no-route = 125.160.0.0/255.224.0.0
no-route = 125.192.0.0/255.192.0.0
no-route = 128.108.0.0/255.224.0.0
no-route = 129.28.0.0/255.224.0.0
no-route = 129.192.0.0/255.224.0.0
no-route = 132.232.0.0/255.224.0.0
no-route = 134.175.0.0/255.224.0.0
no-route = 137.32.0.0/255.224.0.0
no-route = 139.0.0.0/255.224.0.0
no-route = 139.128.0.0/255.128.0.0
no-route = 140.75.0.0/255.224.0.0
no-route = 140.128.0.0/255.128.0.0
no-route = 142.64.0.0/255.224.0.0
no-route = 143.64.0.0/255.224.0.0
no-route = 144.0.0.0/255.192.0.0
no-route = 144.123.0.0/255.224.0.0
no-route = 144.255.0.0/255.224.0.0
no-route = 146.0.0.0/255.192.0.0
no-route = 146.192.0.0/255.224.0.0
no-route = 148.70.0.0/255.224.0.0
no-route = 149.41.0.0/255.224.0.0
no-route = 150.0.0.0/255.224.0.0
no-route = 150.96.0.0/255.224.0.0
no-route = 150.128.0.0/255.224.0.0
no-route = 150.192.0.0/255.192.0.0
no-route = 152.96.0.0/255.224.0.0
no-route = 152.128.0.0/255.224.0.0
no-route = 153.0.0.0/255.192.0.0
no-route = 153.96.0.0/255.224.0.0
no-route = 154.8.128.0/255.224.0.0
no-route = 157.0.0.0/255.192.0.0
no-route = 157.96.0.0/255.224.0.0
no-route = 157.128.0.0/255.224.0.0
no-route = 157.255.0.0/255.224.0.0
no-route = 158.32.0.0/255.224.0.0
no-route = 158.64.0.0/255.224.0.0
no-route = 159.27.0.0/255.224.0.0
no-route = 159.75.0.0/255.224.0.0
no-route = 159.224.0.0/255.224.0.0
no-route = 160.0.0.0/255.224.0.0
no-route = 160.192.0.0/255.192.0.0
no-route = 161.120.0.0/255.224.0.0
no-route = 161.160.0.0/255.224.0.0
no-route = 161.192.0.0/255.224.0.0
no-route = 162.14.0.0/255.224.0.0
no-route = 162.105.0.0/255.224.0.0
no-route = 163.0.0.0/255.192.0.0
no-route = 163.96.0.0/255.224.0.0
no-route = 163.128.0.0/255.128.0.0
no-route = 164.52.0.0/255.224.0.0
no-route = 166.111.0.0/255.224.0.0
no-route = 167.128.0.0/255.192.0.0
no-route = 167.192.0.0/255.224.0.0
no-route = 168.160.0.0/255.224.0.0
no-route = 170.179.0.0/255.224.0.0
no-route = 171.0.0.0/255.128.0.0
no-route = 171.208.0.0/255.224.0.0
no-route = 172.81.192.0/255.224.0.0
no-route = 175.0.0.0/255.128.0.0
no-route = 175.128.0.0/255.192.0.0
no-route = 176.116.4.0/255.224.0.0
no-route = 178.236.224.0/255.224.0.0
no-route = 180.64.0.0/255.192.0.0
no-route = 180.128.0.0/255.128.0.0
no-route = 182.0.0.0/255.0.0.0
no-route = 183.0.0.0/255.192.0.0
no-route = 183.64.0.0/255.224.0.0
no-route = 183.128.0.0/255.128.0.0
no-route = 185.2.48.0/255.224.0.0
no-route = 185.145.244.0/255.224.0.0
no-route = 185.192.0.0/255.224.0.0
no-route = 188.131.128.0/255.224.0.0
no-route = 192.32.0.0/255.224.0.0
no-route = 192.96.0.0/255.224.0.0
no-route = 192.128.0.0/255.224.0.0
no-route = 192.197.113.0/255.224.0.0
no-route = 193.112.0.0/255.224.0.0
no-route = 194.96.0.0/255.224.0.0
no-route = 194.246.40.0/255.224.0.0
no-route = 198.175.100.0/255.224.0.0
no-route = 199.212.57.0/255.224.0.0
no-route = 202.0.0.0/255.128.0.0
no-route = 202.128.0.0/255.192.0.0
no-route = 202.192.0.0/255.224.0.0
no-route = 203.0.0.0/255.255.192.0
no-route = 203.0.64.0/255.255.224.0
no-route = 203.0.96.0/255.255.240.0
no-route = 203.0.112.0/255.255.255.0
no-route = 203.0.114.0/255.255.254.0
no-route = 203.0.116.0/255.255.252.0
no-route = 203.0.120.0/255.255.248.0
no-route = 203.0.128.0/255.255.128.0
no-route = 203.1.0.0/255.255.0.0
no-route = 203.2.0.0/255.254.0.0
no-route = 203.4.0.0/255.252.0.0
no-route = 203.8.0.0/255.248.0.0
no-route = 203.16.0.0/255.240.0.0
no-route = 203.32.0.0/255.224.0.0
no-route = 203.64.0.0/255.192.0.0
no-route = 203.128.0.0/255.192.0.0
no-route = 203.192.0.0/255.224.0.0
no-route = 204.52.191.0/255.224.0.0
no-route = 210.0.0.0/255.192.0.0
no-route = 210.64.0.0/255.224.0.0
no-route = 210.160.0.0/255.224.0.0
no-route = 210.192.0.0/255.224.0.0
no-route = 211.64.0.0/255.192.0.0
no-route = 211.128.0.0/255.192.0.0
no-route = 212.64.0.0/255.224.0.0
no-route = 212.129.128.0/255.224.0.0
no-route = 213.139.232.0/255.224.0.0
no-route = 217.114.35.0/255.224.0.0
no-route = 218.0.0.0/255.128.0.0
no-route = 218.160.0.0/255.224.0.0
no-route = 218.192.0.0/255.192.0.0
no-route = 219.64.0.0/255.224.0.0
no-route = 219.128.0.0/255.224.0.0
no-route = 219.192.0.0/255.192.0.0
no-route = 220.96.0.0/255.224.0.0
no-route = 220.128.0.0/255.128.0.0
no-route = 221.0.0.0/255.224.0.0
no-route = 221.96.0.0/255.224.0.0
no-route = 221.128.0.0/255.128.0.0
no-route = 222.0.0.0/255.0.0.0
no-route = 223.0.0.0/255.224.0.0
no-route = 223.64.0.0/255.192.0.0
no-route = 223.128.0.0/255.128.0.0
# 重启ocserv服务
systemctl restart ocserv
# 关闭OOM
vm.panic_on_oom = 1
# 自动释放cache防止oom
vm.overcommit_memory = 1
# 关闭IPV6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# 开启内核开启数据包转发
net.ipv4.ip_forward = 1
# 开启tcp快速open
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_timestamps = 0
# 自动MTU
net.ipv4.tcp_mtu_probing = 1
# 启用TCP窗口缩放
net.ipv4.tcp_window_scaling = 1
# 低延迟模式
net.ipv4.tcp_low_latency = 1
# 连接结束时保存TCP连接信息,能提高性能,但会导致无法进行网络分析
net.ipv4.tcp_no_metrics_save = 1
# 设置 SYN+ACK 的重试次数。推荐值为 2。
## 默认值为5
net.ipv4.tcp_synack_retries = 2
# 设置SYN的重试次数。推荐值为2
## 默认值为6
net.ipv4.tcp_syn_retries = 2
# 将TCP连接空闲时发送KeepAlive消息的时间间隔设置为300秒(5分钟)
## 默认是7200秒(2小时)
net.ipv4.tcp_keepalive_time = 300
# 设置TCP keepalive探测的次数,推荐值为 5。
## 默认值为9
net.ipv4.tcp_keepalive_probes = 5
# 设置TCP keepalive探测的时间间隔。推荐值为15
## 默认值为75
net.ipv4.tcp_keepalive_intvl = 15
# 在接收UDP和TCP数据包时使用L3协议信息进行过滤,可以减少不必要的数据包。
net.ipv4.udp_l3mdev_accept = 1
net.ipv4.tcp_l3mdev_accept = 1
# 减少重传
net.ipv4.tcp_sack = 1
# 对sack的改进,能够检测不必要的重传
net.ipv4.tcp_dsack = 1
# 指定Fair Queuing 公平队列调度器
net.core.default_qdisc = fq
# 启用BBR
net.ipv4.tcp_congestion_control = bbr
PCI理事会
将于2018年6月30日
停用TLS 1.0
,主流Web浏览器将在2020年
禁用TLS 1.0
和TLS 1.1
。
# 安装gnutls-cli
dnf install gnutls-utils -y
# 查看系统中已经安装的加密算法和协议版本
gnutls-cli -l
# 基本方案--兼容性强
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.2:-VERS-DTLS0.9:-VERS-DTLS1.0"
方案1
# 执行完全向前保密,更多配置在
# https://zhuanlan.zhihu.com/p/515265589
# http://gnutls.org/manual/html_node/Priority-Strings.html
## NORMAL:表示使用默认的TLS配置
## %SERVER_PRECEDENCE:服务器密码套件的偏好将优先于客户端的偏好
## %COMPAT:表示在兼容性模式下运行,以支持较旧的TLS配置
## -RSA : 禁用RSA算法
## +SECURE192:包括使用 192 位密钥进行加密的密码套件
## +SECURE256:包括使用 256 位密钥进行加密的密码套件
## -VERS-ALL:默认禁用所有 TLS 版本
## +VERS-TLS1.2:启用 TLS 版本 1.2
## +VERS-TLS1.3:启用 TLS 版本 1.3
## +VERS-DTLS1.2:启用数据报传输层安全协议(DTLS)版本 1.2
## +COMP-DEFLATE:启用使用 Deflate 算法的压缩
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-ARCFOUR-128:+SECURE192:+SECURE256:-VERS-ALL:+VERS-TLS1.3:+VERS-DTLS1.2:+COMP-DEFLATE"
方案2
## PFS:完全前向保密加密套件
## %LATEST_RECORD_VERSION:在client hello中使用最新的TLS版本记录版本
## %FORCE_ETM:仅当连接双方都支持encrypt-then-mac TLS扩展 (RFC7366) 时,才协商 CBC 密码套件
## -VERS-ALL:禁用所有TLS协议版本
## +VERS-TLS1.2:启用TLS 1.2协议版本
## +VERS-TLS1.3:启用TLS 1.3协议版本
## +VERS-DTLS1.2:启用DTLS 1.2协议版本
## +COMP-NULL:启用无压缩的数据传输
tls-priorities = "PFS:%LATEST_RECORD_VERSION:%FORCE_ETM:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:+VERS-DTLS1.2:+COMP-NULL"
-ssl2 # 检查 SSL 2.0 协议支持
-ssl3 # 检查 SSL 3.0 协议支持
-tls1 # 检查 TLS 1.0 协议支持
-tls1_1 # 检查 TLS 1.1 协议支持
-tls1_2 # 检查 TLS 1.2 协议支持
-tls1_3 # 检查 TLS 1.3 协议支持
# 检查TSL 1.0
openssl s_client -connect .your-domain.com:443 -tls1
# 检查TLS 1.1
openssl s_client -connect .your-domain.com:443 -tls1_1
如果在输出中看到以下消息,则表示不支持TLS
版本。
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
https://www.v2ex.com/t/460243
https://www.v2ex.com/t/158768?p=3
dpd
和 mobile-dpd
改小一点。另外就是用最新
的 ocserv
版本。最近几个更新都对DTLS连接
有优化。
# dpd和mobile-dpd客户端活跃检测(秒),
## 延迟高可以设小点,否则可能会断流
dpd = 90
# 默认为30分钟(秒),可根据断流情况调小
mobile-dpd = 1800
# DTLS超时1年才由UDP模式切换至TCP模式
## 基本上等同于强制DTLS
switch-to-tcp-timeout = 31536000
# 缓冲区默认值10,值小延时低,值大带宽高
output-buffer = 2
# 设置协议定义的优先级(SO_PRIORITY)的数据包发送。从0到6,其中0是最低,6最高
net-priority = 6
profile
文件路径/var/lib/ocserv/profile.xml
# 在ocserv.conf中启用user-profile
user-profile = profile.xml
# 备份profile.xml
cp /var/lib/ocserv/profile.xml{,.bak}
# 编辑profile.xml如下:
vim /var/lib/ocserv/profile.xml
profile.xml
多服务器配置https://gist.github.com/bao3/b917bf978d7f50ed8738
HostAddress
为你的服务器IP地址Hostname
为你的域名
配置如下:
<AnyConnectProfile xmlns="http://schemas.xmlsoap.org/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/encoding/ AnyConnectProfile.xsd">
<ClientInitialization>
<UseStartBeforeLogon UserControllable="false">falseUseStartBeforeLogon>
<StrictCertificateTrust>falseStrictCertificateTrust>
<RestrictPreferenceCaching>falseRestrictPreferenceCaching>
<RestrictTunnelProtocols>IPSecRestrictTunnelProtocols>
<BypassDownloader>trueBypassDownloader>
<WindowsVPNEstablishment>AllowRemoteUsersWindowsVPNEstablishment>
<CertEnrollmentPin>pinAllowedCertEnrollmentPin>
<CertificateMatch>
<KeyUsage>
<MatchKey>Digital_SignatureMatchKey>
KeyUsage>
<ExtendedKeyUsage>
<ExtendedMatchKey>ClientAuthExtendedMatchKey>
ExtendedKeyUsage>
CertificateMatch>
<BackupServerList>
<HostAddress>158.101.157.167HostAddress>
BackupServerList>
ClientInitialization>
<ServerList>
<HostEntry>
<HostName>vipHostName>
<HostAddress>roadstar.vipHostAddress>
HostEntry>
ServerList>
AnyConnectProfile>
# 配置/etc/ocserv/ocpasswd文件权限
chmod 644 /etc/ocserv/ocpasswd
# 创建用户,需要输入密码
ocpasswd -c /etc/ocserv/ocpasswd user1
# 添加用户到组:
ocpasswd -c /etc/ocserv/ocpasswd -g [组名] [用户名]
# 禁用用户
ocpasswd -c /etc/ocserv/ocpasswd -l user1
# 解锁被禁用的用户
ocpasswd -c /etc/ocserv/ocpasswd -u user1
# 删除用户
ocpasswd -c /etc/ocserv/ocpasswd -d user1
# ocpasswd -c /etc/ocserv/ocpasswd 用户名
## -c 指定Password file
sudo ocpasswd -c /etc/ocserv/ocpasswd admin
## 会弹出两次输入密码
生成p12
证书脚本,以实现用户免密登录
。
源码:https://github.com/omaidb/qiaofei_notes/blob/main/shell_code/ocserv/add_client_crt.sh
# 下载脚本
wget -c https://raw.githubusercontent.com/omaidb/qiaofei_notes/main/shell_code/ocserv/add_client_crt.sh
# 执行脚本,生成p12证书脚本
bash add_client_crt.sh
# 按照提示输入证书名即可
用户证书
到设备中https://www.catpaws2011.com/docs/?p=248
user证书
到移动设备
iOS
将p12
下载到手机上,共享给any connect
;
iOS
系统第一次要求输入锁屏密码
,第二次输入证书密码
p12
证书下载到安卓
手机后,必需从本地导入到设备才能被发现证书.
user证书
到Windows
客户端Windows
,开始
—>运行
.输入 mmc
(Microsoft 管理控制台);
文件
---->添加/删除管理单元
---->添加证书
单元;
选计算机账户
---->本地计算机
,确定。
在左边的控制台根节点
下选择—>证书
–个人
,然后选右边的“更多操作
”—>-“所有任务
”---->“导入
”打开证书导入窗口。
选择刚才生成的 client.cert.p12
文件,下一步输入私钥密码。下一步证书存储
选个人
;
导入成功后,把导入的 CA 证书剪切
到“受信任的根证书颁发机构”的证书文件夹里面,打开剩下的那个私人证书,看一下有没有显示“您有一个与该证书对应的私钥”,以及“证书路径”下面是不是显示“该证书没有问题”然后关闭 mmc,提示“将控制台设置存入控制台1吗”,选“否”即可.
至此,证书导入完成。
https://juejin.cn/post/7164349167798583326
可以使用AnyConnect客户端进行链接。
Cisco AnyConnect
客户端配置文件
路径:
# Windows:
%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile
# 实测目录
C:\ProgramData\Cisco\Cisco Secure Client\VPN\Profile
# Mac OS X:
/opt/cisco/anyconnect/profile
# Linux:
/opt/cisco/anyconnect/profile
anyconnect-latest.msi
:
anyconnect-latest.msi :web3下载点
anyconnect-latest.msi :ipfs下载点
cisco-secure-client-win-5.0.01242-core--predeploy-k9.msi
:
cisco-secure-client-win-5.0.01242-core--predeploy-k9.msi :web3下载点1
cisco-secure-client-win-5.0.01242-core--predeploy-k9.msi :ipfs下载点2
anyconnect-macosx-3.1.05160-web-deploy-k9.dmg :web3下载点1
anyconnect-macosx-3.1.05160-web-deploy-k9.dmg :ipfs下载点
openconnect-gui
开源客户端下载地址: https://github.com/openconnect/openconnect-gui/releases
Ubuntu
客户端https://qastack.cn/ubuntu/815145/ubuntu-16-04-openconnect-cisco--failed-to-obtain-web-cookie
应用商店搜索AnyConnect
首页
点击连接
,点击添加VPN连接
,输入你的服务器地址,如果你的服务器地址是443端口,可以不需要加端口号,如果不是443端口号,需要输入ip:端口号。
首页
点击AnyConnect VPN
,输入你的用户名和密码即可连接。
https://www.boer.xyz/2020/05/10/oc--connect/
# 查看当前状态:
## 查看当前服务运行状态:
occtl -n show status
## 查看当前在线用户详情:
occtl -n show users
# 踢掉当前在线用户:
## 通过用户名:
occtl disconnect user 用户名
## 通过id:
occtl disconnect id id号
https://stackoverflow.com/questions/21682121/cisco--client-automatic-login
命令行自动登录方式
# cd到cli目录
cd "C:\Program Files (x86)\Cisco\Cisco Secure Client"
# 新建登录信息
touch response.txt
正常登陆服务器
的登陆信息
,保存到response.txt
。
connect your.server.url
usernanme
password
\n ( # 这里`必须`加一行`空行`作为回车--)
登陆不受信任
的服务器,保存到response.txt
。
## anyway 登陆不受信任的服务器
connect anyway 服务器地址
y
usernanme
password
(这里`必须`加一行`空行`)
Windows执行登陆命令
# cd到cli目录
cd "C:\Program Files (x86)\Cisco\Cisco Secure Client"
# 执行登陆
cli.exe -s < "C:\Program Files (x86)\Cisco\Cisco Secure Client\response.txt"
Linux执行登陆命令
# Linux执行登陆命令
/opt/cisco/anyconnect/bin/cli -s < "response.txt"
# cd到cli目录
cd "C:\Program Files (x86)\Cisco\Cisco Secure Client"
# 断开连接
cli.exe disconnect
参考官方文档: https://www.infradead.org/openconnect/connecting.html
https://www.infradead.org/openconnect/c-script.html
参考三方文档: http://8u.hn.cn/linuxjc/12595.html
opencontent
# 安装命令行版客户端
yum install openconnect -y
# 官方方案需要c-script--不推荐
yum install c-script -y
servercert
# 服务端没配证书的,客户端要先执行一遍这个命令来获取servercert
/bin/echo -n qiaofei123 | /usr/sbin/openconnect 130.10.137.59 -u qiaofei --passwd-on-stdin
无交互式
登录到服务器
/bin/echo -n qiaofei123 | /usr/sbin/openconnect 130.10.137.59 -b -u qiaofei --servercert pin-sha256:MRh2dOPh7UvAprr+mogqs2woerMU9OhzpHfIzyuzVzc= --passwd-on-stdin
# -b 后台
# -u 用户名
# --servercert 免除输入yes
自动登录
写入到service
文件写入到/usr/lib/systemd/system/openconnect.service
[Unit]
Description=OpenConnect登录连接VPN
Documentation=man:openconnect(8)
After=network-online.target
After=dbus.service
Wants=network-online.target
[Service]
Type=simple
# 注意不要加-b参数
ExecStart=/bin/bash -c '/bin/echo -n qiaofei123 | /usr/sbin/openconnect 130.10.137.59 -u qiaofei --servercert pin-sha256:MRh2dOPh7UvAprr+mogqs2woerMU9OhzpHfIzyuzVzc= --passwd-on-stdi'
ExecStop=/usr/bin/pkill openconnect
KillSignal=SIGINT
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
-client
服务设为开机自启
# 重载服务
systemctl daemon-reload
# 将-clinet设为开机自启动并现在启动
systemctl enable --now openconnect
使用ocserv的常见问题。
# 查看ocserv版本
ocserv --version
# 测试配置文件
## -t, --test-config
## -c 指定配置文件
ocserv -t -c /etc/ocserv/config
https://huataihuang.gitbooks.io/cloud-atlas/content/security//openconnect/deploy_ocserv__server.html
使用debug模式分析日志进行诊断
# ocserv调试模式查下日志
ocserv -c /etc/ocserv/config -d 9 -f
服务器
但是上不了网
。# 检查ocserv服务日志
## -u ocserv: 指定要查看的服务名称
## -e: 表示从最新的日志记录开始显示日志。
## -f: 表示持续跟踪日志文件的变化,即实时监视日志文件。
journalctl -eu ocserv -f
# 检查防火墙服务是否开启,允许防火墙DNAT
# 检查是否开启了DNAT
firewall-cmd --query-masquerade
# 设置DNAT
firewall-cmd --add-masquerade
firewall-cmd --add-masquerade --per
Cisco AnyConnect Connection attempt has failed.
修改注册表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
新建DWORD32
,命名为GlobalUserOffline
,值设为0