Sysctl 매개변수 accept_local 및 rp_filter가 이중 네트워크 카드 시스템에서 작동하지 않습니다.

Sysctl 매개변수 accept_local 및 rp_filter가 이중 네트워크 카드 시스템에서 작동하지 않습니다.
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 네트워크로 트래픽을 전송해야 합니다.

관련 정보