호스트가 클라이언트 역할을 할 때 인터페이스는 어떤 IP를 사용합니까?
eth0에 대해 2개의 IP 주소(192.168.1.7 및 192.168.1.8)를 구성했다고 가정합니다.
Route 명령은 다음과 같이 나타납니다.
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.240.0 0.0.0.0 255.255.240.0 U 256 0 0 eth0
...
192.168.240.0
이는 기본적으로 네트워크의 호스트에 연결 하려고 하면 eth0 인터페이스를 사용한다는 의미입니다 . 좋습니다. 그런데... 이 인터페이스의 IP 주소는 무엇입니까?
호스트가 서버 역할을 하고 클라이언트가 IP 주소를 사용하여 내 컴퓨터에 연결하는 경우 192.168.1.7
eth0이 클라이언트와 통신하는 데 사용된다는 것을 알고 있지만 192.168.1.7
, 내가 클라이언트라면 어떻게 될까요?
편집하다
IP 주소가 이미 구성되어 있으며 다음 오류가 발생하기 때문에 Ubuntu WSL의 인터페이스에 다른 IP 주소를 추가할 수 없습니다.
$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied
출력은 ip r s
다음과 같습니다.
$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...
편집 2
WSL2로 업그레이드했는데 이제 IP 주소를 추가하는 명령이 작동합니다(sudo 사용).
$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.7/24 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.8/24 scope global secondary eth0
valid_lft forever preferred_lft forever
답변1
Linux의 경우 귀하의 질문에 대한 답변은 다음과 같습니다.여기에 주어진:
아웃바운드 패킷의 초기 소스 주소는 다음 일련의 규칙에 따라 선택됩니다.
애플리케이션은 특정 IP를 요청할 수 있으며 커널은 선택된 라우팅 경로에서 src 힌트를 사용합니다. 또는 이 힌트가 누락된 경우 커널은 대상 주소와 동일한 네트워크에 있는 인터페이스에 구성된 첫 번째 주소를 선택합니다. 목적지 주소 중간. 다음 홉 라우터.
답변2
클라이언트는 연결하려는 주소와 일치하는 경로를 찾습니다. 예제에 표시된 대로 일치하는 경로가 여러 개 있는 경우 메트릭이 가장 높은 경로 항목을 선택하고 해당 인터페이스의 IP 주소를 사용하여 라우팅 테이블에 있는 인터페이스로 패킷을 보냅니다.
경로의 출력을 잘랐으며 무엇에 연결하는지 명시하지 않았습니다. 따라서 어떤 인터페이스인지는 알 수 없습니다.
서버에서는... 상황이 좀 더 복잡해집니다. 내 Centos 및 Redhat 호스트에는 동일한 서브넷에 여러 인터페이스가 있습니다. 이는 패킷이 전송된 동일한 주소/인터페이스에서 응답합니다. 그러나 최근에는 클라이언트 패킷의 주소 지정을 무시하고 사용할 인터페이스와 주소를 찾기 위해 라우팅 테이블을 다시 방문하는 Ubuntu 및 Debian 시스템도 있었습니다. 클라이언트는 통신하지 않는 IP 주소에서 반환된 패킷을 무시합니다.