누군가가 도울 수있는 흥미로운 문제가 있습니다. 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/24
GRE 터널 사용 액세스) .
다른 일은 없습니다.
이제 SUBB는 SUBA를 핑하려고 시도했지만 작동하지 않습니다. SUBA의 GW를 핑 (ping)하는 것은 작동하지 않습니다 (라우터로서 PC1의 두 번째 인터페이스).
다음은 wireshark 또는 tcpdump를 사용하는 것입니다.
- PC2의 터널 인터페이스에서 트래픽이 라우터로 전달됨
- 라우터로 PC1의 터널 인터페이스에서 트래픽이 나옴
- 트래픽은 라우터로서 PC1의 eth0 인터페이스에 도달하지 않습니다.
그래서 나는 더 깊이 파고 들었고 IP 테이블에 몇 가지 규칙을 추가하여 무슨 일이 일어나고 있는지 확인했습니다.
각 핑 요청은 다음과 같이 계산됩니다.
mangle prerouting
nat prerouting
그러나 ping은 mangle forward (SUBA로 전달하려는 경우) 또는 mangle 입력에서 계산되지 않습니다. 커널이 라우팅에서 패킷을 자동으로 버리는 것으로 보이며 그 이유를 모릅니다. 내 생각에, GRE 테이블을 만들기 전에 필요하지 않았으므로 iptables를 수정할 필요가 없습니다 …
무슨 일이 일어나고 있는지, 커널이 패킷을보고하도록하는 방법 또는 폐기 이유에 대한 도움을 주시면 감사하겠습니다.