使用OpenVPN实现局域网互联

使用OpenVPN搭建VPN服务中介绍了如何使用 OpenVPN 搭建最基本的VPN服务, 可以实现单个客户端与服务端的网络互通, 但是客户端之间, 以及服务端和客户端所在的局域网还不能互联. 本文介绍如何在前文的基础上, 实现客户端之间, 以及服务端和客户端所在的局域网的互联.

注意 绝大部分的配置变更都需要重启 OpenVPN 服务, 会导致所有的客户端连接断开.

客户端互联

默认配置下, 多个客户端之间是不能相互联通的. 如果需要实现客户端互联, 需要修改服务端的配置文件, 如 /etc/openvpn/server/myvpn.conf . 在配置文件中, 找到 client-to-client 配置项. 如果配置项前有 # 或者 ; , 将其删除. 如果没有这个配置项, 在一个空行中添加上. 修改后, 配置项如下:

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client

保存配置后, 需要重启 OpenVPN 服务. 当客户端重新连接到服务后, 应当就可以互通了. 比如有两个客户端, VIP地址分别为10.8.0.6和10.8.0.10:

# ping -c 5  10.8.0.10
PING 10.123.0.10 (10.8.0.10): 56 data bytes
64 bytes from 10.8.0.10: icmp_seq=0 ttl=64 time=14.443 ms
64 bytes from 10.8.0.10: icmp_seq=1 ttl=64 time=14.490 ms
64 bytes from 10.8.0.10: icmp_seq=2 ttl=64 time=14.519 ms
64 bytes from 10.8.0.10: icmp_seq=3 ttl=64 time=14.841 ms
64 bytes from 10.8.0.10: icmp_seq=4 ttl=64 time=14.371 ms

--- 10.8.0.10 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 14.371/14.533/14.841/0.162 ms    

注意 在客户端可能会在TUN设备上看到两个地址, 其中一个是客户端面的VIP, 另外一个是网关. 比如下例中

utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
    inet 10.8.0.6 --> 10.8.0.5/32 utun3

10.8.0.6是VIP, 而10.8.0.5是网关. 在互联时, 需要使用VIP而不是网关地址.

开放服务端所在局域网

比如我们希望从外部访问公司办公局域网的资源时, 可以在办公网里搭建一个VPN服务器, 然后作为网关将整个局域网开放给VPN客户端.

比如办公局域网的IP地址段为192.168.0.0/24, 我们需要在服务端的配置文件中添加需要推送给客户端的路由信息. 比如在本例中, 将以下配置添加到 /etc/openvpn/server/myvpn.conf :

push "route 192.168.0.0 255.255.255.0"

当客户端连接到服务端时, 服务端会将这条路由信息推送给客户端. 客户端接收到这条路由信息后, 会在本地路由表中添加一条新的路由规则, 将目标地址为192.168.0.0/24网段的数据包, 通过VPN的TUN设备发送到VPN服务端.

配置修改完成后, 重启VPN Server

# systemctl restart openvpn-server@myvpn

最后, 需要注意的是, 如果VPN服务端所在的节点不是其所在局域网的网关, 那么需要在局域网的网关上添加路由转发规则, 将目标地址为VPN VIP网段的数据包, 转发到VPN服务端所在节点.

多个客户端所在的局域网联通

比如当有两个不同地点的办公室, 各自有一个办公局域网, 我们希望这两个局域能够通过一个单独的VPN服务器互联.

两个局域网的IP地址段不能重合, 比如分别是192.168.100.0/24和192.168.200.0/24, 在两个局域网分别挑一个节点作为VPN网关, 分别命名为office-gateway100和office-gateway200.

首先, 需要在这两个VPN网关上开启IP转发功能. 具体方法参考使用OpenVPN搭建VPN服务中VPN服务端IP转发的开启方法. 然后就可以开始修改服务端配置了.

  1. 在VPN Server的配置文件里添加客户端配置文件目录:

    /ect/openvpn/server/myvpn.conf 文件里, 添加开启配置项 client-config-dir , 例如:

     client-config-dir ccd

    OpenVPN 会在工作目录下的子目录 ccd 里, 读取需要为单个客户端所做的处理.

  2. 配置局域网VPN网关转发:

    在 _/etc/openvpn/server/ccd__ 目录下, 为两个局域网的VPN网关, 分别创建配置文件. 配置文件的文件名要和客户名相同.

    1. 创建文件 office-gateway100 , 并在文件里添加路由信息:

      iroute 192.168.100.0 255.255.255.0

    2. 创建文件 office-gateway200 , 并在文件里添加路由信息:

      iroute 192.168.200.0 255.255.255.0

    OpenVPN 会将收到的数据根据这两个配置文件的路由信息, 转发到对应的客户端.

  3. 配置内核转发规则

    回到VPN Server配置文件 myvpn.conf, 添加两个局域网的转发规则:

     route 192.168.100.0 255.255.255.0
     route 192.168.200.0 255.255.255.0

    这两项配置生效后, VPN Server所在系统内核会添加相应的路由规则, 将目标地址为这两个子网的数据, 转发到VPN Server的TUN设备上.

  4. 配置客户端推送规则

    在VPN Server配置文件 myvpn.conf 中, 添加如下两条推送规则:

     push "route 192.169.100.0 255.255.255.0"
     push "route 192.168.200.0 255.255.255.0"

    VPN Server会将这两条路由规则推送给客户端, 这样客户端向这两个局域网的地址发送的数据, 都会被转发到VPN Server上来.

配置修改完成后, 重启VPN Server

# systemctl restart openvpn-server@myvpn

最后, 如果局域网内的VPN网关并不是局域网的实际网关时, 需要在实际网关上配置路由转发, 将目标地址为对方局域网的数据包, 转发到VPN网关上.

猜你喜欢

转载自www.cnblogs.com/mithrilon/p/9336804.html