如何允许OpenVPN客户端访问内网设备?

VPN

1 前言

一个问题,一篇文章,一出故事。
当我们完成OpenVPN的点对点连接,点对点连接的详细配置如下,

如何配置Debian OpenVPN客户端?


我们假设上面的节点IP地址是“192.168.0.1/24”,我们想实现其他OpenVPN客户端通过此服务器访问内网的其他服务器,如“192.168.0.10”,则本章节配置对你有帮助。
该服务器如果执行如下命令,

ip a

可见如下显示,

#...
3: enp4s0f1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:07:e9:b5:f2:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global noprefixroute enp4s0f1
       valid_lft forever preferred_lft forever
    inet6 fe80::207:e9ff:feb5:f25b/64 scope link 
       valid_lft forever preferred_lft forever
#...

2 最佳实践

2.1 本章实验基于如下OpenVPN服务器端

如何基于Rocky Linux 9.x部署OpenVPN服务端?


你需要注意的是,本章某些配置文件与默认的OpenVPN服务器配置文件路径有差异,因此请不要照搬。

2.2 允许OpenVPN服务端与客户端网卡IP地址通讯

In OpenVPN Server

2.2.1 使用CCD配置文件声明客户端的网段

vim /etc/openvpn/server/ccd/will-dg

创建如下配置,

ifconfig-push 10.8.0.101 10.8.0.102  # 分配固定VPN IP
iroute 192.168.0.0 255.255.255.0    # 声明该客户端的本地网络

需要注意的是,
– 配置文件名称“will-dg”必须与分配的证书名称相同
– 为“192.168.0.0/24”段生命固定的OpenVPN点对点连接地址(声明客户端能访问的本地网络“192.168.0.0/24”)

2.2.2 服务端主配置添加路由转发

vim /etc/openvpn/server/udp.conf

创建如下配置,

route 192.168.0.0 255.255.255.0      # 添加服务器路由表
client-config-dir /etc/openvpn/server/ccd

需要注意的是,
– iroute只是声明客户端能访问的本地网络,route才是真正让服务器转发流量的指令。
– 如果多个客户端有相同的iroute,需确保它们的本地网络不冲突(如改用不同子网)。

2.2.3 重启服务使用配置生效

systemctl restart openvpn-server@udp.service

以上重启OpenVPN服务器端,同时客户端也需要重启,

systemctl restart openvpn

2.2.4 OpenVPN服务器端的ping测试

ping 192.168.0.1

注:如果能ping通,则OpenVPN服务器端与客户端内网卡通讯正常。

2.3 允许OpenVPN服务端与客户内网IP地址通讯

In OpenVPN Client

2.3.1 启用内核IP转发

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/99-sysctl.conf
sysctl -p

2.3.2 安装iptables

apt remove -y firewalld
apt remove -y ufw
apt install -y iptables-persistent

2.3.3 修改防火墙规则

vim /etc/iptables/rules.v4

加入如下配置,

# sample configuration for iptables service
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o lo -j ACCEPT
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -o enp4s0f1 -j ACCEPT
COMMIT

规制解析,
– 条目“-A FORWARD -o xxx -j ACCEPT”允许对应的接口转发。

2.3.4 启动iptables并设置自启动

systemctl start iptables
systemctl enable iptables
systemctl status iptables

2.3.5 OpenVPN服务器端的ping测试

ping 192.168.0.10

注:如果能ping通,则OpenVPN服务器端与客户端内网IP地址通讯正常。

2.4 允许其他客户端与客户内网IP地址通讯

In OpenVPN Server

2.4.1 推送路由到其他客户端(可选)

vim /etc/openvpn/server/public.conf

加入如下配置,

push "route 192.168.0.0 255.255.255.0"

需要注意的是,
– 效果是所有客户端连接后会自动添加该路由。
– 可选如果不配置,则你需要在其他客户端手动设置路由

2.4.2 其他客户端的ping测试

ping 192.168.0.10
没有评论

发表回复

VPN
如何基于Ubuntu部署OpenVPN服务端?

1 基础知识 1.1 OpenVPN的介绍 OpenVPN是一个功能齐全的开源SSL VPN解决方案 …

VPN
如何签发OpenVPN客户端证书?

1 前言 一个问题,一篇文章,一出故事。 以下章节在一部服务器上同时运行一个TCP OpenVPN实 …

VPN
如何实现OpenVPN多实例共用配置文件?

1 前言 一个问题,一篇文章,一出故事。 以下章节在一部服务器上同时运行一个TCP OpenVPN实 …