후속작입니다내 노트북에 로컬 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
.