无公网IP且路由器未直连互联网时,如何将虚拟机中的Apache服务器设置为公网可访问?
无公网IP且路由器未直连互联网时,如何将虚拟机中的Apache服务器设置为公网可访问?
兄弟,你的情况我太懂了——处于二级NAT环境(路由器套在ISP的内网里,没独立公网IP),还碰上个动态公网IP的坑,但完全可以把你的Apache服务器弄成公网可访问的!下面给你两种实操性拉满的方法,一个适合长期稳定用,一个适合临时测试:
方法1:用Frp反向代理(适合长期稳定访问)
这个方法需要你租一台带公网IP的轻量VPS(不用贵的,1核1G的每月几块钱就够,用来当流量中转的“跳板”),步骤如下:
- 第一步:在VPS上配置Frp服务端(frps)
先下载对应系统的Frp压缩包(比如VPS是Ubuntu就选amd64版本),解压后找到frps.ini文件,修改成下面这样:
然后启动服务端:[common] bind_port = 7000 # Frp服务端监听的端口,后面要在VPS防火墙开这个端口 vhost_http_port = 8080 # 用来转发Apache HTTP请求的端口./frps -c ./frps.ini,要是想让它后台一直跑,就用nohup ./frps -c ./frps.ini &
别忘了在VPS的防火墙里开放7000和8080端口:ufw allow 7000/tcp ufw allow 8080/tcp - 第二步:在你的Ubuntu主机(或直接在虚拟机里,推荐主机,省得虚拟机网络麻烦)配置Frp客户端(frpc)
同样下载对应版本的Frp包,解压后修改frpc.ini:
启动客户端:[common] server_addr = 你的VPS公网IP # 填你租的VPS的实际公网IP server_port = 7000 # 和服务端的bind_port保持一致 [apache_proxy] type = http local_ip = 你的虚拟机内网IP # 虚拟机里用`ip a`就能查到,比如192.168.1.105 local_port = 80 # Apache默认的监听端口 custom_domains = 你的VPS公网IP # 有域名的话可以填域名,没有就用VPS IP./frpc -c ./frpc.ini,后台运行就加nohup ./frpc -c ./frpc.ini & - 第三步:测试访问
找个手机用流量(别连你的Wi-Fi),打开浏览器输入http://你的VPS公网IP:8080,就能看到你的Apache默认页面了!
方法2:用Ngrok(适合临时快速测试)
要是你只是想临时测试一下,不想租VPS,Ngrok绝对是首选,操作超简单:
- 第一步:在你的主机或虚拟机里下载Ngrok压缩包,解压后直接用
- 第二步:去Ngrok官网注册个免费账号,拿到你的专属authtoken(不用记,复制下来就行)
- 第三步:在终端里输入命令把authtoken配置好:
./ngrok config add-authtoken 你的authtoken - 第四步:启动转发,把公网流量转到你的虚拟机Apache:
./ngrok http 你的虚拟机内网IP:80
启动后终端会跳出一个类似http://abc123.ngrok.io的临时域名,用手机流量访问这个域名,直接就能看到你的Apache页面!
注意:免费版Ngrok的域名每次启动都会变,还有流量限制,所以只适合临时测试用。
一些必踩的坑(提前避坑!)
- 虚拟机的网络一定要设成桥接模式,这样虚拟机能拿到和主机同网段的内网IP,转发才不会出问题
- 检查虚拟机和主机的防火墙,必须开放80端口:虚拟机里执行
ufw allow 80/tcp,主机如果开了防火墙也要允许对应流量 - 要是用Frp长期用,最好把服务端和客户端都设成开机自启,比如写个systemd服务文件,省得每次重启都要手动启动
备注:内容来源于stack exchange,提问作者Daigaku no Baku
相关产品推荐
相关产品推荐

