使用子网网关

1 关于子网网关

    当飞网客户端应用程序直接安装在您企业中的每台客户端、服务器和虚拟机上时,飞网的使用效果最好。 通过这种方式,流量被端到端加密,而且在任何物理位置之间移动设备不需要任何配置。

    但是,在某些情况下,一类设备不能够或者不允许在其内部安装额外的功能,我们管它们叫做哑终端设备或者特殊需求的设备, 比如打印机、监控摄像头、无法扩展的嵌入式设备、禁止修改的第三方设备等。

    在这些情况下,您可以通过在某台设备上开启飞网的“子网网关”功能,将该设备可以访问的一个或多个子网加入到飞网中, 加入飞网内的其他设备就可以透过这台设备访问其子网内的所有设备。

2.配置子网网关

2.1 在设备上开启子网网关

    确定开启子网网关的设备(目前仅限Linux与Windows系统)与子网网段,在该设备中按照如下命令操作:

Windows

gmzta on --subnetnode=192.168.1.0/24,10.10.8.0/24

将上面示例中的子网替换为自己的网段,可以是IPV4或者IPV6。

Linux

此功能需要先启用IP转发

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

    开启子网网关的功能,将局域网所在内网网段暴露给飞网

sudo gmzta on --subnetnode=192.168.1.0/24,10.10.8.0/24

将上面示例中的子网替换为自己的网段,可以是IPV4或者IPV6。

2.2 通过控制面板启用子网网关

    在控制面板中打开“设备详情”页面,然后找到开启子网网关的设备,点击“编辑”,在允许的网段上打开开关,最后点击保存。

3 为允许访问的子网添加NACL规则

    如果已有允许访问转发子网的规则,或者使用默认“全部允许”的规则,则不再需要执行此步骤。

    在控制面板中打开“访问控制”页面,编辑您的访问控制策略,创建允许访问子网的ACL规则 此ACL的作用:允许用户标识为“testuser@teamnetwork”访问“192.168.1.0/24","10.10.8.0/24"这两个网段里的设备。

{
  "Acls": [
    {
      "Action": "accept",
      "Src": [
        "testuser@teamnetwork"
      ],
      "Dst": [
        "192.168.1.0/24:*","10.10.8.0/24:*"
      ]
    }
  ]
}

4 允许使用子网网关

    在另一台需要访问子网的设备,您需要先执行“允许使用子网网关”的操作 Windows、macOS和 Android 上的客户端默认允许使用子网网关,对于Linux客户端运行--subnet命令启用此功能

sudo gmzta on --subnet=true

    用户标识为testuser@teamnetwork下的设备即可通过子网网关访问到“192.168.1.0/24","10.10.8.0/24"这两个子网网段里的设备。

5 更新子网网关

    若要更新子网网关,请对新路由执行步骤2到3。

6 关闭子网网关

    可以通过在开启子网网关的Linux或Windows设备上使用命令gmzta on --subnetnode=将子网网关的配置设置为空来关闭子网网关的功能。

    或者将之前在“控制面板”上将开启的子网网段关闭。

7 子网到子网的连接

    通过飞网子网网关的功能可实现子网到子网的连接,即子网A中的设备可以访问子网B中的设备,子网B中的设备也可以访问子网A中的设备。

示例方案

    以下示例将指导您连接飞网中的两个子网:子网 A 和子网 B。两个子网都使用运行 Ubuntu 22.04 x64 的子网网关设备上。

子网A子网B
子网网段192.168.1.0/24192.168.28.0/24
子网网关IP192.168.1.11192.168.28.214

配置子网网关

    在飞网中实现子网到子网的连接,需要先配置每个子网的子网网关,此示例连接两个子网,并需要两个设备充当子网网关(每个子网中一个)。子网 A 将在 192.168.1.11 使用该设备,子网 B 将在 192.168.28.214 使用该设备。

    使用以下步骤设置两个Linux子网网关(192.168.1.11和192.168.28.214)

  1. 下载安装飞网终端程序。
  2. 启用IP转发
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
  1. 使用带参数的命令gmzta on启动飞网客户端程序,以配置正确的子网、禁用源NAT流量到用公布的本地子网路由、启用接受子网配置。
sudo gmzta on --subnetnode=<子网网段> --snatsubnet=false  --subnet=true
  • --subnetnode参数用于指定子网网关的子网网段,例如192.168.1.0/24192.168.28.0/24。谁可以访问这些地址由飞网控制面板中访问控制策略控制。

  • --snatsubnet=false参数用于禁用源NAT流量到用公布的本地子网路由。默认情况下,子网网关后面的设备将流量视为源自子网网关。这简化了路由,但防止遍历多个网络。通过禁用源 NAT,终端设备会将源设备的 IP 地址视为源,该 IP 地址可能是飞网IP地址或另一个子网网关后面的地址,详细介绍可参考snatsubnet

  • --subnet=true接受飞网控制中心推送的子网配置。

  1. 在每个子网网关上配置 iptables,以将最大分段大小 (MSS) 限制到最大传输单元 (MTU)。
iptables -t mangle -A FORWARD -o tailscale0 -p tcp -m tcp \
--tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

通过控制面板启用子网网关

    在控制面板中打开“设备详情”页面,然后找到开启子网网关的设备,点击“编辑”,在允许的网段上打开开关,最后点击保存。

配置子网设备

    启用子网网关后,配置每个子网内的设备。这些设备不需要运行飞网终端程序。但是,需要向每个设备添加静态路由,以告诉它使用指定的子网网关。

  1. 对于子网A 192.168.1.0/24 中的每个设备(子网网关除外),添加以下命令:
ip route add 100.64.0.0/10 via 192.168.1.11
ip route add 192.168.28.0/24 via 192.168.1.11
  1. 对于子网B 192.168.28.0/24 中的每个设备(子网网关除外),添加以下命令:
ip route add 100.64.0.0/10 via 192.168.28.214
ip route add 192.168.1.0/24 via 192.168.28.214

注意:ip route命令在设备重启后不会保留,如果重启设备,需要重新运行这些命令,您可以将这些路由配置添加到/etc/network/interfaces文件中,使路由配置长期保存。

测试子网之间的连接

    现在,子网A中设备与子网B中的设备之间是可以连接的。例如,从子网A中的设备(192.168.1.2)运行ping命令到子网B中的设备(192.168.28.215)。

ping 192.168.28.215
PING 192.168.28.215 (192.168.28.215) 56(84) bytes of data.
64 bytes from 192.168.28.215: icmp_seq=1 ttl=128 time=11.9 ms
64 bytes from 192.168.28.215: icmp_seq=2 ttl=128 time=2.83 ms
64 bytes from 192.168.28.215: icmp_seq=3 ttl=128 time=6.89 ms
上次更新: