라우터의 두 인터페이스 사이에서 GRE 터널을 통한 Ping이 삭제됨-Ping이 서브넷에 도달하지 않음 |———————-|

누군가가 도울 수있는 흥미로운 문제가 있습니다. 2 개의 라우터 (Linux Ubuntu 12.04 실행) 사이에 GRE 터널을 만들고이 터널을 통해 2 개의 서브넷간에 트래픽을 전달하려고합니다.

달성하려는 것은 다음 설정으로 단순화 할 수 있습니다. (다음 다이어그램에서 볼 수 있듯이) 4 대의 컴퓨터, 2 대는 라우터, 2 대는 게이트웨이에 연결된 PC입니다.

      |----------------------|              |----------------------|
SUBA--+--ETH0          ETH1--+----------- --+--ETH0          ETH1--+--SUBB
      |----------------------|              |----------------------|
            PC1 as router                        PC2 as router

이제 다이어그램이 잘못 보이면 설명해 드리겠습니다. 라우터로 구성된 2 개의 PC가 있습니다 ( ip_forwarding=1, proxy_arp=1). 라우터로서의 각 PC에는 2 개의 인터페이스가 있으며 각 인터페이스에는 자체 IP가 있습니다.

다이어그램의 왼쪽 (라우터로서 PC1)

  • SUBA=192.165.13.25
  • 라우터로서 PC1의 ETH0 =192.165.13.254(SUBA의 GW)
  • 라우터로서 PC1의 ETH1 = 192.168.6.40(서비스 제공 업체가 제공 한 주소)-> 라우터로서 PC1의 기본 GW입니다.

다이어그램의 오른쪽 (라우터로서의 PC2)

  • SUBB=192.160.20.25
  • 라우터로 PC2의 ETH0 =192.168.20.41(서비스 제공 업체에서 제공 한 주소)
  • 라우터로서 PC2의 ETH1 =192.160.20.254(SUBB의 GW)

라우팅은 각 끝에서 매우 간단하며 단어로 설명 할 수 있습니다.

PC1에서 라우터로 :

  • 192.165.13.0/24에 액세스하려면 eth0을 사용하십시오.
  • 192.168.6.0/24에 액세스하려면 eth1을 사용하십시오.
  • 기본 GW는 192.168.6.40 => 이것은 eth1입니다

PC2에서 라우터로 :

  • 192.160.20.0/24에 액세스하려면 eth1을 사용하십시오.
  • 192.168.20.0/24에 액세스하려면 eth0을 사용하십시오.
  • 기본 GW는 192.168.20.41 => 이것은 eth0입니다

이 설정에서는 추가 IPTABLE 규칙없이 모든 사람이 모든 사람을 ping 할 수 있습니다. 그리고 나는 좋다. SUBA는 SUBB를 핑 (ping) 할 수 있으며 다른 방법도 괜찮습니다.

라우터가 로컬 = 192.168.6.40및 원격 = 이있는 GRE 터널을 가지고 있기 때문에 라우터가 eth1로 PC1과 PC2 사이에 라우터 eth0 터널로 PC1 사이에 GRE 터널을 만들고 192.168.20.41
있습니다. 로컬 = 192.168.20.41및 원격 = 192.168.6.40… 터널

트래픽을 터널로 강제로 전송하기 위해 라우터로 PC2의 라우팅 (한 규칙 추가)을 수정합니다 ( 192.165.13.0/24GRE 터널 사용 액세스) .

다른 일은 없습니다.

이제 SUBB는 SUBA를 핑하려고 시도했지만 작동하지 않습니다. SUBA의 GW를 핑 (ping)하는 것은 작동하지 않습니다 (라우터로서 PC1의 두 번째 인터페이스).

다음은 wireshark 또는 tcpdump를 사용하는 것입니다.

  1. PC2의 터널 인터페이스에서 트래픽이 라우터로 전달됨
  2. 라우터로 PC1의 터널 인터페이스에서 트래픽이 나옴
  3. 트래픽은 라우터로서 PC1의 eth0 인터페이스에 도달하지 않습니다.

그래서 나는 더 깊이 파고 들었고 IP 테이블에 몇 가지 규칙을 추가하여 무슨 일이 일어나고 있는지 확인했습니다.

각 핑 요청은 다음과 같이 계산됩니다.

mangle prerouting
nat prerouting

그러나 ping은 mangle forward (SUBA로 전달하려는 경우) 또는 mangle 입력에서 계산되지 않습니다. 커널이 라우팅에서 패킷을 자동으로 버리는 것으로 보이며 그 이유를 모릅니다. 내 생각에, GRE 테이블을 만들기 전에 필요하지 않았으므로 iptables를 수정할 필요가 없습니다 …

무슨 일이 일어나고 있는지, 커널이 패킷을보고하도록하는 방법 또는 폐기 이유에 대한 도움을 주시면 감사하겠습니다.



답변