我是否应该将 OpenWrt 上的服务器公开到 WAN,还是仅公开到 LAN 并从 WAN 进行端口转发?

我是否应该将 OpenWrt 上的服务器公开到 WAN,还是仅公开到 LAN 并从 WAN 进行端口转发?

如果我在路由器后面的计算机上安装了服务器,并希望允许从互联网连接到它,我必须做两件事:第一,打开服务器机器上的防火墙以允许传入连接;第二,在路由器上设置端口转发规则,以便连接可以从 WAN 转到 LAN(特别是到服务器机器)。

但是如果所讨论的服务器机器是运行 OpenWrt 的路由器本身,我该怎么办?

我能想到两个选择。

选项 A. 将路由器视为 LAN 中的任何其他计算机。在路由器上安装服务器后,打开防火墙以允许从 LAN 内部到服务器的传入连接。(我相信这是在 LuCI > 网络 > 防火墙 > 流量规则中完成的。)然后,设置从 WAN 到 LAN(特别是服务器)的端口转发规则。(LuCI > 网络 > 防火墙 > 端口转发。)

选项 B. 使用 LuCI 的“流量规则”选项卡打开防火墙,以便从 WAN 直接连接到服务器。

问题是:

  1. 我是否可以认为这是我可以考虑的两个选择?

  2. 双方的优缺点分别是什么?

  3. 标准做法是什么?

有问题的服务器可能是 VPN 服务器(例如 Wireguard)或 OpenSSH,我可能会安装它来代替 Dropbear。但如果您在 OpenWrt 上安装了 A/V 流服务器(假设这是可能的),也会出现同样的问题。换句话说,我希望这个问题仍然是上述两个选项的通用问题,而不是局限于任何特定软件(Wireguard 等)。

我对 OpenWrt 和 Linux 都很陌生。直到几天前我才知道 OpenWrt 的存在。选项 A 可能很疯狂(没人会这么做),我的大脑之所以会想到这个,是因为它以前从未见过类似 OpenWrt 的东西,只能用“常规路由器”的术语来思考。

实际上,这让我觉得选项 A 可能有这个优势。我以前确实做过端口转发,但 Linux 防火墙对我来说还是新鲜事。所以我可能会集中处理流量规则,如果混乱只发生在 LAN 中会更好。

请提供意见。谢谢。

附录

这些是 LuCI 屏幕截图,展示了选项 A(左)和选项 B(右)。左侧面板假设端口 12000 已向 LAN 开放(根据默认策略或特定流量规则)。192.168.1.1。是路由器的 LAN IP 地址。

在此处输入图片描述

答案1

(虽然在某些浏览器上不明显,但每个文件路径都是一个链接)

对于 SSH,标准做法是指定基因转移酶规则 [端口转发] 到其所在的内部网络;而对于 VPN 服务器,你需要创建一条规则以允许 WAN 访问其服务器端口:

  • Wireguard 维基
  • SSH
    • /etc/config/firewall
      #
      
          ##::[[---  OpenWrt WAN Firewall Config  ---]]::##
      
      #===========================================================
                    ##----- NAT Redirects -----##
      #===========================================================
      
      # SSH #
      #-----------------------------------------------------------
      config redirect
          option  target          'DNAT'
          option  proto           'tcp'
          option  src             'wan'
          option  src_dport       60501
          option  dest            'lan'
          option  dest_ip         192.168.1.1
          option  dest_port       22
          option  name            'Allow Redirect WAN → LAN (SSH)'
      
      config redirect
          option  target          'DNAT'
          option  proto           'tcp'
          option  src             'vpn'
          option  src_dport       60502
          option  dest            'lan'
          option  dest_ip         192.168.1.1
          option  dest_port       22
          option  name            'Allow Redirect Wireguard → LAN (SSH)'
      
      #===========================================================
                        ##----- VPN Zones -----##
      #===========================================================
      
      # Wireguard #
      #-----------------------------------------------------------
      config zone
          option  name            'vpn'
          option  network         'vpn'
          option  input           'ACCEPT'
          option  forward         'ACCEPT'
          option  output          'ACCEPT'
          option  log             1
      
      # Rules:
      #-----------------------------------------------------------
      config rule
          option  target          'ACCEPT'
          option  proto           'tcp udp'
          option  src             'wan'
          option  dest            '*'
          option  dest_port       51820
          option  name            'Allow Forwarded Wireguard → Router'
      
      config rule
          option  target          'ACCEPT'
          option  proto           'tcp'
          option  src             'vpn'
          option  dest            '*'
          option  dest_port       60502
          option  name            'Allow Wireguard → Router (SSH)'
      

    • /etc/config/dropbear
      #
      
            ##::[[---  OpenWrt DropBear Config  ---]]::##
      
      #===========================================================
                       ##----- Default -----##
      #===========================================================
      
      # Server #
      #-----------------------------------------------------------
      config dropbear
          option  enable            1
          option  Interface         'lan'
          option  PasswordAuth      'off'
          option  RootPasswordAuth  'off'
          option  IdleTimeout       0
          option  Port              22
          option  RootLogin         1
          option  SSHKeepAlive      300
          option  verbose           1
      

    • /etc/ssh/sshd_config 定制
      #
      
          ##::[[---  OpenWrt OpenSSH SSHd Config  ---]]::##
      
      #===========================================================
                    ##----- Global Options -----##
      #===========================================================
      
        # Please verify, as all algorithms may not supported:
      
          # Ciphers:                  # HostKey & KeyTypes
            ## ssh -Q cipher            ## ssh -Q key
      
          # Kex [Key Exchange]        # MAC [Message Authentication Code]
            ## ssh -Q kex               ## ssh -Q mac
      
      
      # Connection #
      #-----------------------------------------------------------
      AddressFamily                     = inet
      ListenAddress                     = 192.168.1.1:22
      
      
      # Encryption #
      #-----------------------------------------------------------
      AuthorizedKeysFile                = /root/.ssh/authorized_keys
      
      HostKey                           = /etc/ssh/ssh_host_ed25519_key
      HostKey                           = /etc/ssh/ssh_host_rsa_key
      
      
      # Authentication #
      #-----------------------------------------------------------
      AllowUsers                        = root
      AllowGroups                       = root
      
      ChallengeResponseAuthentication   = no
      PasswordAuthentication            = no
      PermitEmptyPasswords              = no
      
      StrictModes                       = yes
      PubkeyAuthentication              = yes
      
      LoginGraceTime                    = 30
      
      MaxAuthTries                      = 3
      MaxSessions                       = 10
      MaxStartups                       = 3:30:10
      
      PermitRootLogin                   = prohibit-password
      
      
      # Reliability #
      #-----------------------------------------------------------
      ClientAliveCountMax               = 3
      ClientAliveInterval               = 600
      
      TCPKeepAlive                      = yes
      
      UseDNS                            = yes
      
      
      # Security #
      #-----------------------------------------------------------
      AllowAgentForwarding              = yes
      AllowTcpForwarding                = yes
      
      GatewayPorts                      = clientspecified
      PermitTunnel                      = yes
      
      Subsystem   sftp                  = /usr/lib/sftp-server
      
      RekeyLimit                        = 500M 60m
      
      
      # Logging #
      #-----------------------------------------------------------
      SyslogFacility                    = AUTH
      LogLevel                          = VERBOSE
      
      PidFile                           = /tmp/run/sshd.pid
      
      
      # Ciphers and ReKeying #
      #-----------------------------------------------------------
      FingerprintHash                   = sha256
      
      Ciphers                           = [email protected],[email protected],aes128-ctr,aes128-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc,[email protected]
      
      HostKeyAlgorithms                 = ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
      
      HostbasedAcceptedKeyTypes         = ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
      
      KexAlgorithms                     = [email protected],curve25519-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256
      
      MACs                              = [email protected],[email protected],hmac-sha2-256,hmac-sha2-512
      
      PubkeyAcceptedKeyTypes            = ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
      

  • 路西
    1. https://<router IP>网络 (左侧菜单)防火墙
    2. 交通规则
      1. 添加:
        姓名: Allow Forwarded Wireguard → Router
        协议: TCP UDP
        源区域: wan
        目的地区域: Any zone (forward)
        目的端口: 51820
        行动: accept
        节省
      2. 添加:
        姓名: Allow Wireguard → Router (SSH)
        协议: TCP
        源区域: vpn
        目的地区域: Any zone (forward)
        目的端口: 60502
        行动: accept
        节省

    3. 端口转发
      1. 添加:
        姓名: Allow Redirect WAN → LAN (SSH)
        协议: TCP
        源区域: wan
        外部端口: 60501
        目的地区域: lan
        内部 IP 地址: 192.168.1.1
        内部端口: 22
        行动: accept
        节省
      2. 添加:
        姓名: Allow Redirect VPN → LAN (SSH)
        协议: TCP
        源区域: vpn
        外部端口: 60502
        目的地区域: lan
        内部 IP 地址: 192.168.1.1
        内部端口: 22
        行动: accept
        节省

    4. 保存并应用

相关内容