フォローアップです。私のラップトップにローカル169.254.169.254アドレスを提供する最良の方法は何ですか?。ショートストーリー:169.254.169.254は、EC2およびOpenStackクラウドメタデータサービスの「よく知られた」アドレスであり、開発作業のために私のラップトップでこれをエミュレートしたいと思います。
このlo:0
アプローチを放棄した後、NAT /ポート転送のみを設定することにしました。私のゲストは、私のワイヤレスカードを介してNATされているデフォルトのlibvirtネットワークを使用してlibvirtで構成されています。 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
ノートブック(ホストOS)自体で実行されている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
。