我现在正在尝试安装 LAMP。
手册上说,如果我安装了 Apache,我就可以继续http://local_server_IP
。并且给出了 2 个命令来获取它:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
当我运行它时,它说我没有这样的设备eth0
,我发现我的以太网接口被命名enp4s0
并运行:
ip addr show enp4s0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
但它什么也没返回。第二条命令是:
curl http://icanhazip.com
它工作并返回2a02:2168:858:8001:0:0:0:5
,这不是正确的值,我无法运行服务器
http://2a02:2168:858:8001:0:0:0:5
然后我认为我需要 IPv4,因此我使用站点找到了我的 IPv4 - 46.242.14.149
,我检查了这个:
http://46.242.14.149
它“加载”了很长时间,找不到页面。所以如果你能告诉我我的错误,我会非常高兴,谢谢你的时间 :)
更新:
如此奇怪的事情——现在curl http://icanhazip.com
又回来了46.242.14.75
。
ip address
输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 44:8a:5b:f0:42:e2 brd ff:ff:ff:ff:ff:ff
3: wlp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 40:e2:30:0d:ea:31 brd ff:ff:ff:ff:ff:ff
inet 10.234.179.135/19 brd 10.234.191.255 scope global dynamic wlp5s0
valid_lft 859sec preferred_lft 859sec
inet6 fe80::54e6:9989:422c:98f6/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d1:61:64:6e brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 52:54:00:93:96:3a brd ff:ff:ff:ff:ff:ff
答案1
首先,验证网络服务器实际监听的地址。运行sudo netstat -an | grep :80
:
$ netstat -an | grep :80
tcp6 0 0 :::80 :::* LISTEN
这里我有一个 Web 服务器,监听端口 80,只在 IPv6 上监听。监听 IPv4 的服务器将使用 tcp 而不是 tcp6,并且它将是0.0.0.0:80
和0.0.0.0:*
,而不是:::80
和:::*
0.0.0.0 是每个可用 IPv4 接口的魔术地址,而 :: 是每个可用 IPv6 接口的魔术地址。
关于地址……你似乎对你拥有的 IPv6 地址有点困惑:IP 2a02:2168:858:8001:0:0:0:5 是你的 IPv6 地址。通常 IPv6 地址是全局的,与 IPv4 网络不同,在 IPv4 网络中,你通常使用 NAT 来处理传出流量,以掩盖你的本地地址。但是,要在浏览器中使用它,你需要将其括在 [] 中,因此http://[2a02:2168:858:8001:0:0:0:5] 应该如果您的网络服务器设置为监听 IPv6,那么就可以工作。
要允许外部 IPv6 访问,您可能必须允许端口 80 通过网络路由器中的防火墙。
至于您找到的另一个 IP,46.242.14.149,这可能是您的外部 IPv4 地址。它不属于您的计算机,而是属于您的路由器。要通过它访问您的网站,您需要设置从路由器到计算机的端口转发。请阅读路由器手册以了解如何执行此操作。
要显示本地接口实际具有哪个 IP,最简单的方法是使用命令ip address
。输出将类似于以下内容:
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether bc:ae:c5:09:5f:15 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.55/24 brd 10.0.1.255 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 2001:4661:7f30:0:beae:c5ff:fe09:5f15/64 scope global mngtmpaddr dynamic
valid_lft 86400sec preferred_lft 14400sec
inet6 fe80::beae:c5ff:fe09:5f15/64 scope link
valid_lft forever preferred_lft forever
我们可以看到,我这里有一个 NIC,enp2s0
它既有 IPv4 (inet) 地址,又有 IPv6 (inet6) 地址。因此,http://10.0.1.55在这种情况下应该可以工作 - 但仅限于本地网络上。
此外,我有一个环回适配器,lo
其 IPv4 地址为 127.0.0.1,IPv6 地址为 ::1。事实上,几乎无论使用哪种操作系统,每台计算机都有此环回地址。它始终指向本地计算机。因此http://127.0.0.1或者http://[::1]将始终通过环回接口连接到本地网络服务器。
您在问题中包含的代码片段本质上是尝试解析 ifconfig 的输出以显示您的 IP 地址。这在某些情况下很有用,但当您只是手动检查它是什么时,这是浪费时间。