首先确认你是否拥有一个真实的公网IP:在家庭网络的路由器管理页查看WAN IP,再打开浏览器访问“whatismyip”类网站对比两处IP是否一致。如果路由器WAN IP属于私有地址段(如100.64.0.0/10),很可能是CGNAT,运营商在上游做了NAT,这会阻止入站端口转发。
其次检查运营商是否封端口:某些运营商会屏蔽常见端口(如80、25)。可以本地运行端口监听并从外网用端口扫描(nmap 或 www.canyouseeme.org)测试。
如果发现是CGNAT或端口被封,可联系ISP申请公网IP,或使用反向隧道(ssh -R)/VPN/第三方中继服务将流量转发到你的VPS。
步骤一:启用内核转发:在VPS上执行 sysctl -w net.ipv4.ip_forward=1;并在 /etc/sysctl.conf 中永久设置 net.ipv4.ip_forward=1。
步骤二:使用iptables做DNAT示例(将外部8080端口转发到内网192.168.1.100:80):
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
如果使用UFW,首先允许转发并在 /etc/ufw/sysctl.conf 启用 net.ipv4.ip_forward,然后用 ufw allow 8080/tcp 并在 /etc/ufw/before.rules 添加 NAT 规则,重载 ufw。
注意:确保服务在目标主机监听正确的地址(0.0.0.0 或对应内网IP),并检查VPS自身防火墙是否阻止该端口。
在路由器管理页面找到“Port Forwarding”、“NAT”或“Virtual Server”区域,添加一条规则:外部端口、内部端口、目标内网IP、协议(TCP/UDP)。
为避免IP变动,建议对目标设备使用静态DHCP绑定(在DHCP列表中将MAC映射到固定IP)。如果路由器支持UPnP,UPnP能自动管理端口,但安全性较差,不推荐用于敏感服务。
若发现端口冲突,检查是否同时启用了路由器的DMZ或同一端口已被映射;必要时更换外部端口并在转发规则中做映射(外部8080 -> 内部80)。
VPS端建议的实践:关闭不必要端口,只开放必需端口;对SSH限制来源IP或使用密钥登录并修改默认端口;安装 fail2ban 做暴力破解防护;启用状态型防火墙(UFW/iptables/firewalld),示例:ufw default deny incoming; ufw allow 22/tcp from 203.0.113.0/24。
对需要公网可达的服务使用白名单或反向代理,限制访问频率(rate limiting)。定期更新系统和应用,监控/分析日志(/var/log)以发现异常连接。
家庭路由器端:启用内置防火墙,只开启必要的端口转发;禁用远程管理(WAN admin)或限制到特定IP;若有高级功能可启用GeoIP阻断、端口触发或应用层网关。
第一步:确认服务在目标主机上已启动并监听正确端口(使用 ss -tlnp 或 netstat -tln)。第二步:从VPS或公网环境对目标端口做扫描(nmap -p 8080 your.ip),确认端口是否在VPS上可达。
第三步:检查防火墙日志(iptables/ufw)是否有被DROP的记录;使用 tcpdump 抓包(tcpdump -i eth0 port 8080)确认流量是否到达VPS或内网设备。
第四步:验证路由器端口转发规则和目标内网IP是否匹配;检查是否存在双重NAT(例如运营商调制解调器+自购路由器),若存在需把运营商设备设为桥接或把路由器放在DMZ。
第五步:考虑MTU或网络质量问题,使用 ping/traceroute 确认路径延迟与丢包;若ISP封端口或使用CGNAT,可采用SSH反向隧道(ssh -R 0.0.0.0:2222:localhost:22 user@vps)或配置VPN中继到你的VPS。