问题
我只能在内部访问我的 nginx Web 服务器。Web 服务器托管在我的虚拟机上。外部世界无法访问它。内部是指在我的虚拟机和主机内,而不是从外部设备(例如未连接到 Wi-Fi 的智能手机)访问。我已将虚拟机网络设置配置为使用桥接适配器,并且我在路由器中配置了端口转发(见下图)。我可以使用外部和内部 IP 访问主机上的 Web 服务器。配置后路由器已重新启动。
目标
我希望外界能够访问我的网络服务器。
规格
主机操作系统:Windows 10
虚拟化软件:VirtualBox(Ubuntu Desktop 20.04.3 LTS)
VM 上的 Web 服务器:Nginx
VirtualBox 网络配置:
Attached to: Bridged Adapter
Name: Intel(R) 82579V Gigabit Network Connection
Adapter Type: Intel PRO/1000 MT Desktop (82540EM)
Promiscuous Mode: Allow All
所有名称选项:
Intel(R) 82579V Gigabit Network Connection
VirtualBox Host-Only Ethernet Adapter
VirtualBox Host-Only Ethernet Adapter 2
路由器 - 端口转发
Status: ON | TCP | Port: 80 | External Host: <ip from checkmyip.com> | Internal Host: 192.168.0.100
从虚拟机配置 ipconfig
mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::1070:8c81:f616:2b84 prefixlen 64 scopeid 0x20<link>
inet6 fdaa:bbcc:ddee:0:7c85:b26e:a007:cfd5 prefixlen 128 scopeid 0x0<global>
ether 08:00:27:c5:6f:79 txqueuelen 1000 (Ethernet)
RX packets 400 bytes 320675 (320.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 292 bytes 42926 (42.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 173 bytes 15040 (15.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 173 bytes 15040 (15.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
nginx 配置
...
server {
listen 80;
server_name 192.168.0.100;
}
...
谢谢!
答案1
在端口转发规则中定义源 IP(外部主机)将访问限制在该 IP 地址。因此端口转发规则
Status: ON | TCP | Port: 80 | External Host: <ip from checkmyip.com> | Internal Host: 192.168.0.100
翻译为
Forward all packets with source IP <MyOwnIPAddr> and port 80 to 192.168.0.100
防火墙上创建了端口转发规则,由于它永远不会接收来自其自身 IP 地址的新连接,因此它会阻止这些连接。源 IP 的配置方式取决于解决方案,我希望可以在防火墙的文档中找到它,但将其留空通常有效。如果没有,则可能采用以下方法之一:
- 0.0.0.0
- 0.0.0.0/0
- 0.0.0.0 255.255.255.255
所有这些都在路由中用于指代未知/未定义的 IP 地址。