root@host-3:~# uname -a
Linux host-3 4.4.35-1-pve #1 SMP Fri Dec 9 11:09:55 CET 2016 x86_64 GNU/Linux
root@host-3:~# cat /etc/debian_version
8.9
root@host-3:~# ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.2 Bcast:192.168.1.2.255 Mask:255.255.255.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3313 errors:0 dropped:0 overruns:0 frame:0
TX packets:348 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:224843 (219.5 KiB) TX bytes:29794 (29.0 KiB)
eth1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3028 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:196588 (191.9 KiB) TX bytes:1330 (1.2 KiB)
아래 설정에서는 호스트-3에서 트래픽이 회선으로 나가지 않습니다. 스택은 이를 수신 애플리케이션으로 다시 보냅니다.
두 인터페이스의 패킷 캡처는 실제로 어떤 네트워크 인터페이스에도 패킷이 도착하지 않음을 보여줍니다.
왜 이런거야?
호스트 2개, NIC/호스트 1개: 작동합니다(아래 호스트 3과 비교).
--------------------- ------------------------------------------- ---------------------
| Linux Host host-1 | | Device Under Test (router) | | Linux Host host-2 |
| 192.168.1.2/24|----------|192.168.1.1/24 192.168.2.1/24|----------|192.168.2.2/24 |
--------------------- ------------------------------------------- ---------------------
2개의 네트워크 카드가 있는 1개의 호스트: 작동하지 않습니다.
---------------------
| Linux Host host-3 |
| 192.168.1.2/24|--------|
| eth0| |
| | |
| | |
| eth1| |
| 192.168.2.2/24|---| |
--------------------- | |
| |
| |
| |
| | -------------------------------------------
| | | Device Under Test (router) |
| |---------|192.168.1.1/24 192.168.2.1/24|---------|
| ------------------------------------------- |
| |
| |
| |
| |
|------------------------------------------------------------------|
정적 경로를 포함한 Host-3의 라우팅 테이블
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.2 192.168.2.1 255.255.255.255 UGH 0 0 0 eth1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.2.2 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
Host-3의 관련 커널 매개변수
root@host-3:~# sysctl -a | grep "\.rp_filter"
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
root@host-3:~# sysctl -a | grep "accept_local"
net.ipv4.conf.eth0.accept_local = 1
net.ipv4.conf.eth1.accept_local = 1
net.ipv4.conf.all.accept_local = 1
net.ipv4.conf.default.accept_local = 1
net.ipv4.conf.lo.accept_local = 0
업데이트 #1
트래픽 유형과 가상 머신 관련 여부를 묻는 댓글에 대한 응답으로...
트래픽은 단지 핑입니다. 또한 UDP 유니캐스트를 사용하여 테스트한 결과 동작에 차이가 없음을 발견했습니다.
예, 이들은 가상 머신입니다. 실제로 더 정확하게 말하면 Proxmox 4.4에서 실행되는 LXC Linux 컨테이너입니다.
그리고, 제가 원래 게시물 이후에 발견한 또 하나의 사실이 있습니다.
핑할 때 -I 옵션을 사용하여 콘센트(예: 소스)를 지정하면IP 주소, 행동에 변화가 없다고 생각합니다. 그러나 ping의 -I 옵션을 사용하여 콘센트를 지정하면상호 작용, 모든 것이 작동하는 것 같지만 주의할 점이 있습니다. ping 명령이 응답을 받기까지의 왕복 시간이 약 40밀리초이기 때문에 작동한다고 말합니다. 이는 패킷이 스택에 의해 단락되지 않고 실제로 나가는 경우(이 경우 왕복 시간은 밀리초 미만) 예상되는 것입니다. 그러나 주의사항이 있습니다..
송신 및 수신 인터페이스의 패킷 캡처 표시오직에코 요청. 캡처아니요에코 답장을 표시합니다. 어떻게 이런 일이 일어날 수 있는지 모르겠습니다...
답변1
# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
# ip route list table local
[...]
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.0.100
local 192.168.0.100 dev eth0 proto kernel scope host src 192.168.0.100
broadcast 192.168.0.255 dev eth0 proto kernel scope link src 192.168.0.100
이 테이블은 수정할 수 없습니다 local
. 커널이 이를 유지합니다. 이는 우선순위가 가장 높은 테이블이므로 다른 테이블(예: )에서 무엇을 정의하든 상관없습니다 main
. 이러한 항목은 절대 일치하지 않습니다.
답변2
트래픽은 호스트 3의 라인을 떠나지 않으며 두 개의 서로 다른 그림 서브넷과 통신합니다.왜냐하면Host3에는 두 서브넷 모두에 속하는 NIC가 있으므로 두 서브넷에 모두 속하는 멀티홈 컴퓨터입니다. (또는 라우터 밖으로 흘러나오지 않기 때문에 출력 인터페이스를 강제로 하면 응답을 받지 못합니다)
따라서 실제로 일어나는 일은 대상이 192.168.1.2/24 및 192.168.2.2/24인 모든 트래픽이 호스트3에 대한 내부 트래픽이고 서버의 루프백으로 이동하므로 네트워크에서 이를 볼 수 없다는 것입니다.
또한 두 개가 아닌 하나의 기본 게이트웨이만 사용하는 것이 좋습니다. 무슨 일이 일어나는가?비호스트 3 내부 네트워크 트래픽, 라우터/기본 게이트웨이로 전송됩니다. 위의 네트워크 블록에는 해당되지 않습니다.
약간 다른 설정을 권장합니다.
---------------------
| Linux Host host-3 |
| 192.168.1.2/24|--------|
| eth0| |
| | |
| | |
| eth1| |
| 192.168.2.2/24|---| |
--------------------- | |
| |
| |
| |
| | -------------------------------------------
| | | Device Under Test (router) |
| |---------|192.168.3.2/24 192.168.3.1/24|---------|
| ------------------------------------------- |
| |
| |
| |
| |
|------------------------------------------------------------------|
회선의 트래픽을 보려면 호스트3에서 192.168.3.0/24 네트워크로 트래픽을 전송해야 합니다.