내가 하고 싶은 것

내가 하고 싶은 것

내가 하고 싶은 것

네트워크 인터페이스 사이에서 IP 패킷을 라우팅하도록 Debian Stretch GNU/Linux 컴퓨터를 설정하고 싶습니다.

문맥

내 Debian 상자와 곧 출시될 라우터에서 사용할 수 있는 네트워크 인터페이스는 다음과 같습니다.

색인 인터페이스 이름 아이피
1 enpu2s0 192.168.23.91/24
2 enx00e04c360e75 192.168.1.1/24
enx000ec667a74a 192.168.2.2/24
  • sysctl net.ipv4.ip_forward이 반환되므로 1라우팅이 활성화됩니다.
  • cat /proc/sys/net/ipv4/conf/*/rp_filters 외에는 아무것도 반환하지 않습니다 0. 따라서 역방향 경로 필터링이 비활성화됩니다. (이것은 내가 발견한 다른 문제에 대한 우려의 원천입니다.)

라우팅 테이블은 다음과 같습니다.

$ sudo route -nn
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.23.254  0.0.0.0         UG    100    0        0 enp2s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     101    0        0 enx00e04c360e75
192.168.2.0     0.0.0.0         255.255.255.0   U     102    0        0 enx000ec667a74a
192.168.23.0    0.0.0.0         255.255.255.0   U     100    0        0 enp2s0

다음 작품

NIC 2( )에 연결된 장치에서 192.168.1.111NIC 2( 192.168.1.1) 및 NIC 3( 192.168.2.2)을 ping할 수 있습니다.

tcpdump내 Debian 라우터의 출력은 예상한 대로 나타납니다.

$ sudo tcpdump -i enx00e04c360e75 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:10:51.919808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 17, length 64
18:10:51.919863 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 17, length 64
18:10:52.920019 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 18, length 64
18:10:52.920130 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 18, length 64
18:10:53.920808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 19, length 64
18:10:53.920895 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 19, length 64
[...]
18:11:03.408546 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 0, length 64
18:11:03.408622 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 0, length 64
18:11:04.405006 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 1, length 64
18:11:04.405061 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 1, length 64
18:11:05.405147 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 2, length 64
18:11:05.405201 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 2, length 64

다음은 작동하지 않습니다

NIC 2를 통해 연결된 장치에서 NIC 1을 통해 연결할 수 있는 일부 호스트를 ping할 수 없습니다.

tcpdump내 Debian 컴퓨터에서 실행하면 NIC 2에서 들어오는 패킷이 표시됩니다.

$ sudo tcpdump -i enx00e04c360e75 icmp -n
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:11:31.837778 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 4, length 64
18:11:32.838830 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 5, length 64
18:11:33.838249 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 6, length 64
[...]

그러나 그들은 결코 NIC 1을 통해 떠나지 않습니다:

$ sudo tcpdump -i enp2s0 icmp -n
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
[nothing]

Debian 라우터 상자에서 직접 ping을 실행하면 tcpdump예상한 대로 보입니다.

$ sudo tcpdump -i enp2s0 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:35:16.577795 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 1, length 64
18:35:16.600861 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 1, length 64
18:35:17.578164 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 2, length 64
18:35:17.599898 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 2, length 64

질문

NIC 2에 도착하는 핑 패킷이 NIC 1을 통해 중계되는 것을 방지하는 방법은 무엇입니까? 이러한 패킷의 라우팅을 활성화하려면 어떻게 해야 합니까?

답변1

의견에서 교환된 내용을 요약하면 다음과 같습니다.

  • 시스템이 명시적으로 라우터로 구성되지 않았습니다.

    즉, 다음을 적용할 명시적인 구성이 없습니다.

    sysctl -w net.ipv4.ip_forward=1
    
  • 시스템이 Docker를 실행 중입니다.

    이는 다음을 의미합니다.

    • Docker는 시스템을 라우터로 전환합니다.

      그것은 스스로를 설정합니다:

      sysctl -w net.ipv4.ip_forward=1
      
    • 루스트어바웃방화벽 정책에서 경로 차단

      라우터의 도커

      Docker는 또한 FORWARD 체인의 정책을 DROP으로 설정합니다. Docker 호스트가 라우터 역할도 하는 경우 라우터가 더 이상 트래픽을 전달하지 않게 됩니다. 시스템이 계속해서 라우터 역할을 하도록 하려면 체인에 명시적인 ACCEPT 규칙을 추가하여 DOCKER-USER이를 허용할 수 있습니다.

      $ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT
      

그래서

  • Docker가 전달된 패킷을 삭제하도록 합니다(컨테이너 제외).
  • Docker를 중지하면 더 이상 전달이 활성화되지 않습니다(적어도 다음 시작 시).

두 경우 모두 시스템은 라우팅 없이 종료됩니다.

아마도 다음 두 가지 작업을 수행해야 합니다.

  • 라우팅( /etc/sysctl.conf또는 어딘가 /etc/sysctl.d/) 을 명시적으로 활성화합니다.
  • Docker 가이드를 따르세요.이전 링크에서트래픽 라우팅 허용

관련 정보