群晖配置允许外网通过本机访问本地LAN

通过OpenVPN、Zerotier等访问群晖本地LAN的其他设备

设置群晖的内网转发

  1. 使用SSH连接到NAS并切换到ROOT身份

  2. 启用IP转发(永久修改)

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


    第三行可能会执行失败,可以重启系统或者执行以下代码临时开启IP转发:

    1
    echo 1 > /proc/sys/net/ipv4/ip\_forward
  3. 设置NAT转发

    • 方式一(推荐)

      1
      iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE

      这一条用于配置网络地址转换(NAT)的命令。下面是对这条命令的详细分析:

      1. iptables:这是 Linux 系统下的一个命令行工具,用于设置、维护和检查 Linux 内核的防火墙(Netfilter)。它允许用户配置规则,以控制数据包如何通过网络接口流动。

      2. -t nat:这个参数指定了要操作的表为 “nat” 表。NAT 表用于进行网络地址转换,主要是在私有网络和公共网络之间转换 IP 地址。

      3. -A POSTROUTING:这个选项表示向 “POSTROUTING” 链添加一条规则。POSTROUTING 链在数据包即将离开本机之前进行处理,适用于改变出站流量的 IP 地址。

      4. -o ! lo:这里的 -o 选项指定了规则应用于哪个输出接口。! lo 意味着不适用于本地回环接口(lo)。这意味着这条规则将应用于所有非本地流量,使得流出数据包的源地址会被伪装。

      5. -j MASQUERADE:这是“跳转”目标的指令,MASQUERADE 的作用是将数据包的源地址伪装为出口接口的 IP 地址。这个选项主要用于动态分配的 IP 地址(如拨号连接),因为它会自动使用出口接口的当前 IP 地址。

      实现功能:

      • 这条命令的整体功能是配置一条规则,使得所有离开指定网络接口的流量(不包括本地流量)都以这个网络接口的 IP 地址为来源进行发送,能够有效地将局域网内的多台设备通过一台公网 IP 地址访问外网。
      • 这样的配置常用于需要让局域网设备能够通过外网进行通信的场景,非常适合在家庭或公司环境中使用,以便实现资源共享或远程访问。
    • 方式二

      eth0为网卡名,如果是多网口的机器,请使用ifconfig查找自己机器的网卡名

      1
      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      • 命令详细解释:
      1. iptables:这是一个用于配置Linux内核防火墙的命令行工具。它控制数据包过滤和网络地址转换(NAT)。

      2. -t nat:这个参数指定正在操作的表类型为“nat”(网络地址转换表)。在Linux中,iptables有多个表,nat表用于处理数据包的地址转换。

      3. -A POSTROUTING:这个部分是指将规则添加到“POSTROUTING”链。POSTROUTING链在数据包离开设备时被处理,通常用于改变出站的数据包的地址。

      4. -o eth0:这个选项指定了出接口(outgoing interface),在这里是eth0。这意味着规则只会应用于通过eth0接口离开的数据包。

      5. -j MASQUERADE-j指的是“跳转”(jump),它指定了应采取的操作。MASQUERADE意味着将出站数据包的源地址替换为该主机的IP地址,这对于动态IP地址的接口非常有用。

      • 命令分析:
        此命令的作用是设置网络地址转发规则,使得通过eth0接口离开的数据包,其源地址将被修改为该接口的IP地址。这常用于家庭或小型办公室网络中,让网络中的内部设备能通过一个公共IP地址访问互联网。

      • 总结:
        该命令在NAS设备上配置NAT转发,允许位于本地网络(LAN)内的设备通过指定的外部网络接口(如eth0)访问外部网络。这是实现远程访问和内外网连接的关键步骤,尤其是在使用如OpenVPN或Zerotier的情形下。

添加用户自定义脚本,使得启动时自动设置NAT转发

  • 控制面板 -> 服务 -> 任务计划 -> 新增 -> 触发的任务 -> 用户自定义的脚本;

  • 常规 -> 一般设置 -> 事件 -> 开机 ;

  • 任务设置 -> 用户自定义的脚本`;

  • 输入以下代码并”确定”

    1
    2
    sleep 1m  
    iptables -t nat -A POSTROUTING -o ! lo -j MASQUERADE

    为保证开机启动已加载所有网络模块,延迟1分钟再添加NAT,否则会遇到模块不存在错误