这是后续为我的笔记本电脑提供本地 169.254.169.254 地址的最佳方式是什么?。简短的故事:169.254.169.254 是 EC2 和 OpenStack 云元数据服务的“众所周知”地址,我想在我的笔记本电脑上模拟它以进行开发工作。
放弃这种lo:0
方法后,我决定只设置 NAT/端口转发。我的客人由 libvirt 配置,使用默认的 libvirt 网络,该网络通过我的无线网卡进行 NAT,libvirt 的配置如下:
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE tcp -- 192.168.77.0/24 !192.168.77.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.77.0/24 !192.168.77.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.77.0/24 !192.168.77.0/24
这条规则:
sudo iptables -t nat -I OUTPUT -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination 127.0.0.1:80
从笔记本电脑(主机操作系统)本身运行的 Firefox 进行转发的工作非常出色。但从客人的内心,我得到了No route to host
。
显然我需要其他东西来完成这项工作。什么?
根据要求,提供更多网络信息。为了简洁起见,我删除了向下的接口ip addr
。
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 60:67:20:44:8d:48 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.5/24 brd 192.168.1.255 scope global wlp3s0
valid_lft forever preferred_lft forever
inet6 fe80::6267:20ff:fe44:8d48/64 scope link
valid_lft forever preferred_lft forever
4: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:84:3d:aa brd ff:ff:ff:ff:ff:ff
inet 192.168.77.1/24 brd 192.168.77.255 scope global virbr1
valid_lft forever preferred_lft forever
$ ip route
default via 192.168.1.1 dev wlp3s0 proto static
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.5
192.168.77.0/24 dev virbr1 proto kernel scope link src 192.168.77.1
$ ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE tcp -- 192.168.77.0/24 !192.168.77.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.77.0/24 !192.168.77.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.77.0/24 !192.168.77.0/24
$ iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.77.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.77.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
您需要 PREROUTING 中的 DNAT,也许还需要 INPUT 中的规则,但我不确定这是否可以解释错误消息。您的主机上有到该网络的路由吗?有什么奇特的ip rule
东西吗?请提供ip addr
、ip route
、 和的输出ip rule
。
iptables -t nat -I PREROUTING -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination $local_ip
lo
如果您可以使该服务不仅侦听非环回接口,而且还侦听非环回接口,事情可能会变得容易得多。说 $local_ip 应该是而192.168.77.1
不是127.0.0.1
。