IP 전달 없이 서로 다른 인터페이스의 서브넷 간 연결

IP 전달 없이 서로 다른 인터페이스의 서브넷 간 연결

이것은 슈퍼유저에 대한 첫 번째 질문이므로 적절하지 않은 경우 사과드립니다.

나는 pop!_OS 19.10(Ubuntu 19.10 기반)을 실행 중이고 네트워크 동작을 이해하려고 노력하고 있습니다. 네트워크 인터페이스가 주어지면 eth0다음 서브넷을 추가했습니다.

ip addr add dev eth0 192.168.2.18/24
ip addr add dev eth0 192.168.3.18/24

이제 인터페이스는 다음과 같습니다(MAC 주소가 변경됨).

1: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet 192.168.3.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever

을 사용하면 ncIP 주소 192.168.2.18192.168.3.18.

##################################################################################
# nc -v -l 192.168.2.18 8080
Listening on [pop-os] (family 2, port 8080)
Listening on pop-os 8080
Connection received on pop-os 55361
Hello World!
##################################################################################
# nc -v -s 192.168.3.18 192.168.2.18 8080
Connection to 192.168.2.18 8080 port [tcp/http-alt] succeeded!
Hello World!
##################################################################################
# ss -4 -n
tcp    ESTAB    0    0    192.168.3.18:55361    192.168.2.18:8080           
tcp    ESTAB    0    0    192.168.2.18:8080     192.168.3.18:55361          

질문 1:내 주소가 다음과 같다고 가정하는 것이 옳습니까?별도의 서브넷동일한 인터페이스(방화벽에 의해 차단되지 않는 한) 항상 서로 통신할 수 있습니까? 커널이 라우팅 테이블을 조사하여 두 네트워크를 로컬로 간단히 연결할 수 있다는 것을 알기 때문입니까? 즉:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

이제 커널 IP 전달을 조사하고 읽었기 때문에 이것을 테스트했습니다.여기:

그러나 전달이 꺼지면 커널은 먼저 패킷이 어느 인터페이스에서 왔는지 확인합니다. 동일한 인터페이스에서 나온 것이 아닌 경우 커널은 이를 삭제합니다.

그러나 주소를 사용하여 192.168.2.18다른 인터페이스를 통해 연결할 수도 있습니다 . IP 전달이 비활성화되어 있습니다.wlan0192.168.1.73

Netid    State  Recv-Q  Send-Q    Local Address:Port  Peer Address:Port           
tcp      ESTAB  0       0         192.168.2.18:8080   192.168.1.73:40405          
tcp      ESTAB  0       0         192.168.1.73:40405  192.168.2.18:8080           

질문 #2:IP 전달을 활성화하지 않고도 서로 다른 서브넷 및 인터페이스의 IP 주소가 통신할 수 있는 이유는 무엇입니까? 같은 호스트에 속해 있기 때문일까요? 이 동작은 어디에 정의되어 있나요? 즉, IP 전달 규칙은 패킷이 호스트를 떠나기 시작한 후에만 시작됩니까?

답변1

질문 #1: 동일한 인터페이스의 별도 서브넷에 있는 주소가 (방화벽에 의해 차단되지 않는 한) 항상 서로 통신할 수 있다고 가정하는 것이 옳습니까? 커널이 라우팅 테이블을 조사하여 두 네트워크를 로컬로 간단히 연결할 수 있다는 것을 알기 때문입니까? 즉:

예. 이는 찾은 "서브넷" 항목이 아니라 별도의 라우팅 테이블('로컬' 테이블)에 있는 "로컬 주소" 항목으로 인해 발생합니다. 이전 '경로' 도구는 의도적으로 이러한 항목을 숨길 가능성이 높지만 오래되었으며 최신 Linux 커널이 보관하는 라우팅 정보를 완전히 표시할 수 없으므로 다음을 사용하십시오.

ip -4 route show table local
ip -6 ro ls tab local

(참고: 이는 Linux에만 해당됩니다. BSD에는 일반적으로 라우팅 테이블이 하나만 있으며 플래그가 설정된 netstat -rn특수 경로가 표시됩니다 l. 다른 운영 체제에서는 내장된 동작일 수도 있고 반드시 경로로 노출되지 않을 수도 있습니다. 모두.)

또한 주소가 동일한 인터페이스에 있을 필요도 없습니다.실제로 물리적 인터페이스를 사용하지 마십시오. 대신 커널은 자신의 주소가 단순히 커널을 통해 라우팅되는 것처럼 동작합니다.루프백인터페이스 'lo'.

질문 #2: IP 전달을 활성화하지 않고도 서로 다른 서브넷 및 인터페이스의 IP 주소가 통신할 수 있는 이유는 무엇입니까? 같은 호스트에 속해 있기 때문일까요? 이 동작은 어디에 정의되어 있나요? 즉, IP 전달 규칙은 패킷이 호스트를 떠나기 시작한 후에만 시작됩니까?

예, 같은 호스트에 속해 있기 때문입니다. (Linux에서는 동일한 네트워크 네임스페이스(예: 동일한 컨테이너)에도 있어야 합니다.)

IP 전달 규칙은 패킷이 다음과 같을 때 시작됩니다.받았다루프백이 아닌 인터페이스를 통해(예: 이더넷을 통해 로컬 MAC 주소로 왔지만) 대상 IP가 호스트에 속한 것으로 인식되지 않습니다.

정의에 따라 로컬로 생성된 패킷은 "전달"되지 않으므로(로컬 소스 IP 주소가 있으므로 "출력"됩니다) 전달 규칙이 적용되지 않습니다.

관련 정보