服务端
1、安装软件
apt-get update
apt-get install openvpn
apt-get install easy-rsa
2、复制软件到etc下
cd /etc/openvpn/
mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa
mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0
3、配置证书环境
cd /etc/openvpn/easy-rsa/2.0
vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="LiaoNing"
export KEY_CITY="Shenyang"
export KEY_ORG="abc.com"
export KEY_EMAIL="me@abc.com"
export KEY_OU="vpnusers"
# 添加 openssl 配置文档
cp openssl-1.0.0.cnf openssl.cnf
# 使环境变量生效
source ./vars
4、生成证书
# 清除keys目录下所有与证书相关的文件
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca
# 为服务端生成证书和私钥, --batch 表示保持默认设置,无须回车确认
./build-key-server --batch server
# 为客户端生成证书和私钥(client可为不同的名称)
./build-key --batch client
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh
# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key
# 将证书文件复制到/etc/openvpn/server
cp -r /etc/openvpn/easy-rsa/2.0/keys/* /etc/openvpn/server
# 将服务器端配置文件模板复制到/etc/openvpn/server
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server
cd /etc/openvpn/server/
gunzip -d /etc/openvpn/server/server.conf.gz
5、配置服务端文件
vim /etc/openvpn/server/server.conf
daemon
# 服务端口
port 11194
# 使用的传输协议
proto tcp
# 路由模式,桥接模式用dev tap
dev tun
#设置固定ip,/etc/openvpn/ccd 里创建somgl文件,ifconfig-push 192.168.19.100 192.168.19.101
client-config-dir /etc/openvpn/ccd/
# 证书路径
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 192.168.19.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 192.168.19.0 是OpenVPN服务器所在局域网的网段
push "route 192.168.19.0 255.255.255.0"
push "route 10.10.2.0 255.255.255.0"
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
# 这里如果设置了 tls-auth 则客户端也要设置,而且要跟服务器端对应,服务端为0,客户端则为 1
tls-auth /etc/openvpn/server/ta.key 0
max-clients 100
keepalive 10 120
comp-lzo
persist-key
persist-tun
#认证证书
crl-verify /etc/openvpn/easy-rsa/easy-rsa/2.0/keys/crl.pem
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
###指定只用的认证脚本,这里配置使用用户名和密码登录的支持,可以取代使用秘钥和证书登录
#auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
###不请求客户的CA证书,使用User/Pass验证,如果同时启用证书和密码认证,注释掉该行
#client-cert-not-required
### 使用客户提供的UserName作为Common Name
#username-as-common-name
#script-security 3
6、设置固定ip文件
mkdir /etc/openvpn/ccd
vim somgl
ifconfig-push 192.168.19.100 192.168.19.101
iroute 192.168.122.0 255.255.255.0
#iroute为客户端下子网地址,子网地址和其他客户端可以互通
#注意生成客户端证书时名称写为somgl,生成的somgl.crt,somgl.key文件复制到客户端上
./build-key --batch somgl
7、
配置内核和防火墙,启动服务端
# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p
其他语句
# 查看iptables规则
iptables -nvL
# 查看nat表
iptables -nvL -t nat
# 开机自动加载配置
sudo apt-get install iptables-persistent
# 保存规则
sudo service netfilter-persistent save
# 开机启动
systemctl enable openvpn
# 重启服务
service openvpn restart
#服务启动
/usr/sbin/openvpn /etc/openvpn/server/server.conf &
#撤销证书(会在keys目录下生成crl.pem文件)
./revoke-full client
客户端
8、客户端配置:
软件安装和上面一样
cd /etc/openvpn/client/
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/client.conf
9、配置客户端文件
vim /etc/openvpn/client/client.conf
client
# 这里设置跟服务端一样
dev tun
proto tcp
# OpenVPN 服务端 IP 和端口
remote 192.168.100.1 11194
resolv-retry infinite
nobind
persist-key
persist-tun
# 这里设置证书和秘钥
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/somgl.crt
key /etc/openvpn/client/somgl.key
remote-cert-tls server
ns-cert-type server
# 如果服务端使用 tls-auth, 则这里也要启用
tls-auth /etc/openvpn/client/ta.key 1
comp-lzo
verb 3
#客户端启动
/usr/sbin/openvpn /etc/openvpn/client/client.conf &
10、客户端作为网关
#开启网卡
sudo ip link set eth0 up
sudo ip link set eth2 up
# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p
#eth2为openvpn客户端作为网关的出接口
#192.168.122.0是需要连接网关的设备的ip地址
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE
sudo route add -net 192.168.122.0 netmask 255.255.255.0 dev eth2
#需要连接网关的子设备,连接网闸的eth0网口,设置ip 192.168.122.19 子网掩码 255.255.255.0 网关 192.168.19.100,子设备ping 本地内网ip地址
#注意客户端服务器上是否有其他防火墙如:ufw、ebtables等,需要停止后在设置iptables
另一个客户端
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE
route del -net 10.10.3.0 gw 192.168.19.103 netmask 255.255.255.0 dev tun0
route del -net 10.10.6.0 gw 192.168.19.103 netmask 255.255.255.0 dev tun0
route del -net 10.10.7.0 gw 192.168.19.103 netmask 255.255.255.0 dev tun0
设置开机启动
openvpn-client开机启动服务
vim /etc/systemd/system/openvpn-client.service
[Unit]
Description=openvpn-client
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/client --config /etc/openvpn/client/client.conf
Restart=always
[Install]
WantedBy=multi-user.target
sudo chmod 755 /etc/systemd/system/openvpn-client.service
sudo systemctl start openvpn-client.service
sudo systemctl enable openvpn-client.service
sudo systemctl daemon-reload
vim /etc/rc.local
#增加规则
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE
route add -net 192.168.122.0 netmask 255.255.255.0 dev eth2