ICMP는 호스트에게 불가능한 리디렉션을 제공합니다.

ICMP는 호스트에게 불가능한 리디렉션을 제공합니다.

일부 헤드리스 VirtualBox 가상 머신을 호스팅하는 시스템에서 전달하는 데 문제가 있습니다. 아무것도 변경하지 않았지만 구성이 작동을 멈췄습니다. 가상 머신에는 자체 서브넷에 IP 주소가 있으며 이를 자체적으로 라우팅해야 합니다. 따라서 호스트에는 IP와 게이트웨이가 있고 가상 머신에서 게이트웨이로 사용되는 별칭이 있습니다.

호스트 구성:

root@greece:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 0c:c4:7a:02:5d:36
          inet addr:192.99.46.35  Bcast:192.99.46.255  Mask:255.255.255.0
          inet6 addr: 2607:5300:60:5123::/64 Scope:Global
          inet6 addr: fe80::ec4:7aff:fe02:5d36/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:31246 errors:0 dropped:35 overruns:0 frame:0
          TX packets:5818 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:30002593 (28.6 MiB)  TX bytes:3268821 (3.1 MiB)
          Memory:fb920000-fb940000

eth0:0    Link encap:Ethernet  HWaddr 0c:c4:7a:02:5d:36  
          inet addr:198.50.241.112  Bcast:198.50.241.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Memory:fb920000-fb940000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2191 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2191 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2781224 (2.6 MiB)  TX bytes:2781224 (2.6 MiB)

root@greece:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.99.46.254   0.0.0.0         UG    0      0        0 eth0
192.99.46.0     *               255.255.255.0   U     0      0        0 eth0
198.50.241.0    *               255.255.255.0   U     0      0        0 eth0

root@greece:~# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1088  987K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    1    84 ACCEPT     all  --  *      *       198.50.241.0/24      0.0.0.0/0           
    1    60 ACCEPT     all  --  *      *       0.0.0.0/0            198.50.241.0/24     
    1    72 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 ctstate NEW
   40 13120 UDP        udp  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate NEW
    0     0 TCP        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcpflags: 0x17/0x02 ctstate NEW
   40 13120 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-unreachable

Chain FORWARD (policy ACCEPT 109 packets, 7776 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 854 packets, 1879K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination
root@greece:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

이 구성이 작동해야 합니다. 가상 머신에서 호스트의 기본 IP(192.99.46.35)에 액세스할 수 있습니다. 호스트 게이트웨이(192.99.46.254)에 ping을 시도하면 흥미로운 응답을 받습니다.

root@minecraft:~# ping -c 2 192.99.46.254
PING 192.99.46.254 (192.99.46.254) 56(84) bytes of data.
From 198.50.241.112: icmp_seq=1 Redirect Host(New nexthop: 192.99.46.254)
64 bytes from 192.99.46.254: icmp_req=1 ttl=254 time=47.1 ms

--- 192.99.46.254 ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1002ms
rtt min/avg/max/mdev = 47.134/47.134/47.134/0.000 ms
root@minecraft:~# ping -c 2 192.99.46.254
PING 192.99.46.254 (192.99.46.254) 56(84) bytes of data.
From 198.50.241.115 icmp_seq=1 Destination Host Unreachable
From 198.50.241.115 icmp_seq=2 Destination Host Unreachable

--- 192.99.46.254 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1011ms
pipe 2

호스트를 리디렉션하여 응답한 다음 호스트에 연결할 수 없게 됩니다. 내가 아는 한 그것은 작동해야합니다. 구성은 변경되지 않았습니다. 게스트 가상 머신의 구성은 매우 간단합니다.

root@minecraft:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:8e:9b:2b  
          inet addr:198.50.241.115  Bcast:198.50.241.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe8e:9b2b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:750 errors:0 dropped:0 overruns:0 frame:0
          TX packets:336 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:79663 (77.7 KiB)  TX bytes:30405 (29.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:48 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4405 (4.3 KiB)  TX bytes:4405 (4.3 KiB)

root@minecraft:~# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         198.50.241.112  0.0.0.0         UG    0      0        0 eth0
localnet        *               255.255.255.0   U     0      0        0 eth0

참고: IP 테이블을 새로 고치고 입력 정책을 수락으로 설정해도 아무 것도 변경되지 않습니다. 이는 NAT 구성이 아니며 게스트의 인터넷 주소가 정확합니다.

답변1

이 문제를 해결하는 방법은 호스트에서 ICMP 리디렉션을 비활성화하는 것만큼 간단했습니다. 문제 없이 오랫동안 실행한 후 왜 보내기 시작했는지 모르겠습니다. 그러나 sysctl에서 몇 가지 간단한 변경을 수행하면 이 문제를 피할 수 있습니다.

root@greece:~# sysctl -w net/ipv4/conf/eth0/accept_redirects=0
net.ipv4.conf.eth0.accept_redirects = 0
root@greece:~# sysctl -w net/ipv4/conf/eth0/send_redirects=0
net.ipv4.conf.eth0.send_redirects = 0

이러한 변경 사항은 /etc/sysctl.conf에 반영되어 이러한 상황이 발생하지 않도록 방지할 수 있습니다.

관련 정보