文章
综合

教你在debian上用五分钟搭建好 openconnect vpn server

这篇文章的主要内容是,让你用最短的时间让你在debian系统的服务器上搭建好openconnect vpn server,以供openconnect或者anyconnect客户端连接(黑莓手机、只能登录中国大陆AppleID的账号的IPhone对此是刚需):

具体方法:

第一步:使用apt安装所需的软件包

apt-get install iptables-persistent ocserv

第二步:修改配置文件

首先,需要修改 /etc/sysctl.conf,以用于开启IP转发。(对于VPN服务器而言,这是必要的。确保以下内容存在于文件中,若不存在将以下内容添加到配置文件末尾即可)

net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 0
net.ipv4.ip_forward_use_pmtu = 1
net.ipv6.conf.all.forwarding = 1

然后,继续需要修改 /etc/ocserv/ocserv.conf,以用于设置服务器基本配置参数。(这是必要的,以下贴出的配置文件中的信息可以按需修改,再编辑文件之前,建议将原始文件备份,以用作参考)

# openconnect server user
run-as-user = ocserv
run-as-group = ocserv

# require file while server run
socket-file = /run/ocserv-socket
chroot-dir = /var/lib/ocserv

# isolate sub proccess control
isolate-workers = true

# net interface for server
device = op

# mtu size for server
mtu = 1480

# log level
log-level = 1

# auth method
auth = "plain[/etc/ocserv/ocpasswd]"
 
# maximum users allowed connect
max-clients = 10
 
# maximum client allowed connect for per user
max-same-clients = 5
 
# server listen address (default is all)
# listen-host = 
 
# server listen ports (default is 443, but can modified)
tcp-port = 443
udp-port = 443
 
# mtu auto discovery for per tunnel
try-mtu-discovery = true
 
# user certificate type
# cert-user-oid = 2.5.4.3
 
# certificate and private key for server
server-cert = /etc/ocserv/server.pem
server-key = /etc/ocserv/server.key
 
# dns while clients connected use
dns = 8.8.8.8
dns = 9.9.9.9
tunnel-all-dns = true

# route option (set it to default as a gateway)
#route = 192.168.1.0/255.255.255.0
route = default
 
# enable cisco anyconnect compatible
cisco-client-compat = true

# keep alive interval
keepalive = 32400
dpd = 60
mobile-dpd = 120

# other option
output-buffer = 0
rate-limit-ms = 0

# access control
restrict-user-to-routes = false
restrict-user-to-ports = ""

# disconnected idle time
# idle-timeout = 1200
# mobile-idle-timeout = 1800

# dtls protocol control
dtls-legacy = true
switch-to-tcp-timeout = 30
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.2"

# compression control
compression = true
no-compress-limit = 0

# speed limit by per client
rx-data-per-sec = 0
tx-data-per-sec = 0

# client auth control
auth-timeout = 240
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200

# client status control
cookie-timeout = 600
rekey-time = 172800
deny-roaming = false
use-occtl = true

# internal network settings
ipv4-network = 10.255.255.0/24
ipv6-network = fd09::/80
ipv6-subnet-prefix = 128
client-bypass-protocol = false
predictable-ips = true
ping-leases = true
net-priority = 3

第三步:签发自签名SSL证书、设置相应的iptables转发规则

首先,运行以下命令来签发一个自签名SSL证书。(命令运行后会提示填写相应信息,按照自己的需要按需填写即可,若未修改上述配置文件中的SSL证书私钥保存路径,则应将生成的文件放置在 /etc/ocserv 下)

openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout server.key -out server.pem

之后,为了确保客户端连接后能正常访问互联网,我们需要设置相应的规则以用作开启NAT转发。

# 这几句话的意思是,允许相应网段的流量经过机器转发,如果不正确配置此规则,则客户端到公网的UDP连接是不通的
iptables -I FORWARD -s 10.255.255.0/24 -j ACCEPT
iptables -I FORWARD -d 10.255.255.0/24 -j ACCEPT
ip6tables -I FORWARD -s fd09::/80 -j ACCEPT
ip6tables -I FORWARD -d fd09::/80 -j ACCEPT
# 这几句话的意思是,对于来源于VPN服务器的网段的流量,NAT之后再到公网
iptables -A POSTROUTING -s 10.255.255.0/24 ! -o op+ -j MASQUERADE
ip6tables -A POSTROUTING -s fd09::/80 ! -o op+ -j MASQUERADE

设置完成规则后,需要将其保存到配置文件中才能永久生效,以下是具体方法(若服务器原本已经存在相应的配置文件,则此类方法可能不适用,请考虑将上述规则转换后直接写入配置文件)

iptables-save >> /etc/iptables/rules.v4
ip6tables-save >> /etc/iptables/rules.v6

第四步:添加用户

如果没有修改配置文件中用户验证的方法的话,默认是需要手动添加用户的,此时就需要添加用户到指定的配置文件中。(格式为 ocpasswd 用户名 -c /etc/ocserv/ocpasswd ,运行命令后会提示给相应的用户设置一个密码,若以后需要删除相应用户的话,直接修改对应的文件,删除相应行即可)

ocpasswd boss -c /etc/ocserv/ocpasswd

第五步:开启相应端口

若服务器本身存在防火墙白名单规则的话,则需要按需开放防火墙端口,以下是对于iptables而言的方法。

iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
iptables -I INPUT -p udp --dport 端口号 -j ACCEPT

第六步:重启服务器

完成上述步骤后,就可以使用openconnect或者anyconnect客户端测试是否能正常连接了。

可选步骤: 若能将服务器端的ocserv版本升级到1.2.1以上的话,还可以开启入口伪装功能,以让外界更难发现这是一个VPN服务器,若可以确认版本在此之上,只需要向配置文件添加以下内容到末尾,就可以开启伪装功能。(开启此功能后 客户端只能通过 https //SERVER/?secret 的方式连接到服务器)

# camouflage
camouflage = true
camouflage_secret = "dark"
camouflage_realm = "router admin panel"

常见疑问:

1.为什么搭建的服务连接速度特别慢? 这一般是由于客户端到服务器的网络质量不好导致的。若确认不是网络质量导致的问题,则可以通过修改配置文件的方式,将传输压缩功能关闭就可以了。

2.我想要在iphone上连接,但是它登录的是中国大陆的appleid,我应该怎么做? 只需要在大陆区应用商店下载安装cisco anyconnect客户端,然后填写相应信息连接即可。

3.我在河南省,这个方法在我这不可用怎么办? 不要尝试使用域名的方式连接,直接填写服务器IP连接就可以了。(若开启了伪装功能则将URL中的地址替换为服务器本身的IP地址就可以了)

菜单