![当端口转发不可选时,访问路由器后面的 Web 服务器。类似 localtunnel,但适用于多个站点](https://linux22.com/image/804483/%E5%BD%93%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E4%B8%8D%E5%8F%AF%E9%80%89%E6%97%B6%EF%BC%8C%E8%AE%BF%E9%97%AE%E8%B7%AF%E7%94%B1%E5%99%A8%E5%90%8E%E9%9D%A2%E7%9A%84%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%82%E7%B1%BB%E4%BC%BC%20localtunnel%EF%BC%8C%E4%BD%86%E9%80%82%E7%94%A8%E4%BA%8E%E5%A4%9A%E4%B8%AA%E7%AB%99%E7%82%B9.png)
情况 我在一台开发机器上运行着一个 Web 服务器(VMware 上的 CentOS,多个虚拟主机),我想授予客户端访问权限来查看某些网站,而我无需将它们上传到外部托管帐户。
问题 我无法访问路由器,因此无法设置端口转发。但是,我有一个托管帐户(具有 ssh 访问权限)甚至一个 VPS。
问题 我可以在我的外部托管帐户或 VPS 上设置一些东西,通过某种方式从我的本地服务器(路由器后面)提取数据并将其提供给最终用户来处理网页请求吗?我知道这有点复杂,但性能并不重要。
谢谢你!!!
答案1
已经有了好的想法,但是这里有一个解决方案,可以让您的 VMWare 像在您的 vps 上一样可访问:
安装 openvpn服务器在您的 vps 上。有很多教程。我建议选择桥接模式(使用 tap 接口)。选择一个 IP 范围,如 10.1.2.1-254(10.1.2.0/24)。生成 ca 等后,生成一个名为“vmware”的客户端密钥,不带密码,并在 /etcopenvpn/cdd 目录中放置一个名为“vmware”的文件,内容如下:
--ifconfig-推 10.1.2.3 255.255.255.0
您的 server.conf 中的重要行(即:您必须从默认配置中更改)
dev tap0
server-bridge 10.1.2.1 255.255.255.0 10.1.2.100 10.1.2.110
client-config-dir /etc/openvpn/ccd
确保 udp 端口 1194 可供公众访问(或者至少从您的 vmware 机器的公共 IP 开放)。
- 在您的 vmware 上也安装了 openvpn,但在 /etc/openvpn/ 目录中输入:
- 你的私钥 + 证书 + ca 证书
- 名为“vps.conf”的文件,包含客户端配置
重要台词:
remote <public ip address your vps> 1194
ca, cert, key
如果您启用 openvpn 服务( checkconfig openvpn on ),客户端将在启动时自动启动,并在您的 vpn 和 vps 之间建立隧道。
- 现在在您的 vps 的 apache 配置中创建一个 vhost(最好不是默认的),内容如下:
服务器名称 MyVmware.vm.ware.com
RewriteEngine 在 RewriteRule 上 (.*) http://10.1.2.3/$1
[P,L]
给你..
顺便说一句,您刚刚将开发服务器公开。我建议至少在 Apache 配置中限制访问。
答案2
如果您在内部网络上,并且没有外围设备的管理员,则无法让来自互联网的传入连接到达您私有局域网内的主机。但是,有几个选择
1)您的私有网络内的盒子可以连接到您的云服务器/vps(但反之则不行),因此有一个 cron 来填充 apache/nginx 的文档根目录。例如,您可以每小时使用 pki 和 rsync。
2)在内部盒子上设置 openvpn,并从那里启动到客户站点的隧道(不推荐...这是进入您公司的后门)
3)与防火墙管理员交朋友,让他们为你转发端口(尽管你很可能必须上传到 DMZ 中的 Web 服务器,因此不妨执行 #1 并上传到云端)
答案3
您可以在开发计算机上执行如下操作:
ssh vps-hostname -R 8080:localhost:80
这将创建一个从 vps 上的端口 8080 到本地计算机上的端口 80 的加密隧道。
我认为您还需要配置 ssh 以使用保持活动数据包(例如在 VPS 上ClientAliveInterval
启用选项sshd_config
),因为连接空闲时间过长会被路由器中断。