如果我在路由器后面的计算机上安装了服务器,并希望允许从互联网连接到它,我必须做两件事:第一,打开服务器机器上的防火墙以允许传入连接;第二,在路由器上设置端口转发规则,以便连接可以从 WAN 转到 LAN(特别是到服务器机器)。
但是如果所讨论的服务器机器是运行 OpenWrt 的路由器本身,我该怎么办?
我能想到两个选择。
选项 A. 将路由器视为 LAN 中的任何其他计算机。在路由器上安装服务器后,打开防火墙以允许从 LAN 内部到服务器的传入连接。(我相信这是在 LuCI > 网络 > 防火墙 > 流量规则中完成的。)然后,设置从 WAN 到 LAN(特别是服务器)的端口转发规则。(LuCI > 网络 > 防火墙 > 端口转发。)
选项 B. 使用 LuCI 的“流量规则”选项卡打开防火墙,以便从 WAN 直接连接到服务器。
问题是:
我是否可以认为这是我可以考虑的两个选择?
双方的优缺点分别是什么?
标准做法是什么?
有问题的服务器可能是 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
- 路西:
https://<router IP>
→网络 (左侧菜单)→防火墙- 交通规则
- 添加:
姓名:Allow Forwarded Wireguard → Router
协议:TCP UDP
源区域:wan
目的地区域:Any zone (forward)
目的端口:51820
行动:accept
节省 - 添加:
姓名:Allow Wireguard → Router (SSH)
协议:TCP
源区域:vpn
目的地区域:Any zone (forward)
目的端口:60502
行动:accept
节省
- 添加:
- 端口转发
- 添加:
姓名:Allow Redirect WAN → LAN (SSH)
协议:TCP
源区域:wan
外部端口:60501
目的地区域:lan
内部 IP 地址:192.168.1.1
内部端口:22
行动:accept
节省 - 添加:
姓名:Allow Redirect VPN → LAN (SSH)
协议:TCP
源区域:vpn
外部端口:60502
目的地区域:lan
内部 IP 地址:192.168.1.1
内部端口:22
行动:accept
节省
- 添加:
- 保存并应用