1. 服务端启动脚本
进入目录创建脚本
mkdir ./openvpncd openvpnnano start.sh
将下面代码填入
#!/bin/bashecho "输入服务端IP或者域名"read NODE_HOSTecho "输入配置文件目录/绝对路径"read CONF_PWD
#生成配置文件和私钥文件docker run -v $CONF_PWD:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u tcp://$NODE_HOSTdocker run -v $CONF_PWD:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki#启动cat <<EOF > ./docker-compose.yamlversion: "3"services: openvpn: image: kylemanna/openvpn container_name: openvpn volumes: - $CONF_PWD:/etc/openvpn ports: - "1194:1194" cap_add: - NET_ADMINEOF
docker-compose up -d
启动脚本
sh start.sh#输入IP和路径后#第一个选项是输入密码#第二个是重复输入密码#第三个任意#第四个是输入第一次的密码#第五个是输入第一次的密码
2. 创建用户
创建脚本
nano create_user.sh
填入
#!/bin/bash#创建用户echo "输入创建的用户名"read USERecho "输入配置文件地址/绝对路径"read CONF_PWDdocker run -v $CONF_PWD:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $USER nopassdocker run -v $CONF_PWD:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $USER > ./$USER.ovpn#添加链接配置echo 'comp-lzo no' >> ./$USER.ovpn
启动脚本
sh create_user.sh
目录下生成配置文件USER.ovpn
, 将配置文件导入客户端即可
3. 客户端通过服务端访问网络
# 客户端需要设置静态路由,以便所有流量都通过OpenVPN隧道# 例如在Windows上,假设192.168.255.6为虚拟IProute add 0.0.0.0 mask 0.0.0.0 192.168.255.6 metric 1
# 在服务端设置端口转发和网络转发规则# 编辑系统配置文件以启用IP转发nano /etc/sysctl.conf# 添加以下行net.ipv4.ip_forward = 1# 运行以下命令使更改生效sysctl -p
# 设置NAT表的POSTROUTING规则,以便将从eth0接口发出的数据包的源地址转换为公共IP地址iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 如果你的网络中有其他特定需求,例如使用UPnP或端口映射,可以进一步配置# 例如,将内部IP的端口映射到外部IPip route add 192.168.255.0/24 via 172.18.0.2 #openvpn容器的IPiptables -t nat -A PREROUTING -p tcp --dport 37376 -j DNAT --to-destination 192.168.255.6:37376iptables -t nat -A POSTROUTING -p tcp --dport 37376 -j SNAT --to-source 104.233.210.38
# 登入OpenVPN容器,设置IP转发及NAT规则docker exec -it openvpn bashnet.ipv4.ip_forward = 1iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADEiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 更多的端口转发规则,如果需要iptables -t nat -A PREROUTING -p tcp --dport 50010 -j DNAT --to-destination 192.168.255.6:50010iptables -t nat -A POSTROUTING -p tcp --dport 37376 -j SNAT --to-source 104.233.210.38
# 如果有需要,可以添加更多静态路由规则sudo route add -net 192.168.36.0/24 gw 192.168.255.6route add -net 192.168.255.0/24 gw 172.18.0.1# 删除不需要的路由规则route del -net 192.168.36.0/24 gw 172.18.0.1
route add -net 192.168.255.0/24 gw 172.18.0.1route del -net 192.168.36.0/24 gw 172.18.0.1
4. OpenVPN
服务端要设置推送路由 ,让客户端访问这些 ip/ip 段 来找服务端
同时服务端要设置静态路由,告诉服务端,对应的 ip/ip 段,要去哪个虚拟 ip(客户端路由)