두 네트워크 카드 간의 라우팅

두 네트워크 카드 간의 라우팅

다른 네트워크 간에 트래픽을 라우팅하려고 하는데 여기에서 찾은 가이드를 따랐습니다. https://devconnected.com/how-to-add-route-on-linux/

다음은 내가 작업 중인 배열을 적절하게 설명하기를 바라는 다이어그램입니다.

Windows 10              Ubuntu                            Linux
172.31.0.X <----------> 172.31.0.33 (eno1)
                        10.0.40.1 (enp2s0f0) <----------> 10.0.40.10

172.31.0.33을 통해 10.0.40.0/24의 트래픽을 라우팅하기 위해 Windows PC에 영구 경로가 설정되어 있습니다.

경로 인쇄 출력

Ubuntu 시스템은 10.0.40.1을 통해 10.0.40.0/24로 향하는 트래픽을 라우팅하도록 설정되어 있습니다.

IP R 출력

Ubuntu 시스템에서 10.0.40.10을 핑하는 것이 예상대로 작동합니다.

Windows PC에서 10.0.40.10을 ping하면 tcpdump를 사용하여 Ubuntu 시스템의 172.31.0.33 인터페이스에 ICMP 메시지가 도착하는 것을 볼 수 있습니다. 해당 머신의 10.0.40.1 인터페이스에는 트래픽이 표시되지 않습니다. Ubuntu 시스템이 예상한 대로 트래픽을 라우팅하지 않는 것 같습니다. 내가 놓친 부분에 대해 누구든지 밝힐 수 있습니까?

출력 추가:

iptables -S

우분투 머신의 경우:

sudo iptables -S
# Warning: iptables-legacy tables present, use iptables-legacy to see them
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eno1 -j ACCEPT
-A FORWARD -i enp2s0f0 -j ACCEPT
adi@LabBuildServer:~$ sudo iptables-legacy -S
[sudo] password for adi:
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-e925d11be2da -m conntrack --ctstate RELATED,ESTABLISHED -j ACCE                         PT
-A FORWARD -o br-e925d11be2da -j DOCKER
-A FORWARD -i br-e925d11be2da ! -o br-e925d11be2da -j ACCEPT
-A FORWARD -i br-e925d11be2da -o br-e925d11be2da -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e925d11be2da ! -o br-e925d11be2da -j DOCKER-IS                         OLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e925d11be2da -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

출력:

ip route

Linux 호스트에서:

ip route
default via 10.0.40.1 dev br-POE  proto static
10.0.40.0/24 dev br-POE  proto kernel  scope link  src 10.0.40.10

우분투 머신:

adi@LabBuildServer:~$ sudo iptables -t nat -L
[sudo] password for adi:
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
MASQUERADE  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

답변1

해결책은 바로 여기에 있습니다:

-P FORWARD DROP

규칙 세트 에서 패킷 전달을 위한 기본 정책은 DROP으로 설정되어 있으며 해당 규칙 세트에는 에서 으로의 패킷 전달을 허용하고 브리지 인터페이스와의 에서/으로만 전달을 iptables-legacy허용하는 규칙이 없습니다 .eno1enp2s0f0

서로 다른 iptable을 혼합하는 것은 항상 매우 나쁜 생각입니다. 사용하려는지 스스로 결정해야 합니다. iptables또는 iptables-legacy각 네트워크 패킷은 두 규칙 세트를 모두 거치므로 많은 혼란을 야기합니다.

업데이트:
내 대답은 기본 정책을 수락으로 설치해야 한다는 의미가 아니라 단지 그 이유를 지적한 것뿐입니다. 물론 다음과 같이 특정 IP로만 트래픽을 전달하도록 허용하는 규칙을 추가할 수 있습니다.

-A FORWARD -i eno1 -s 172.31.0.0/24 -o enp2s0f0 -d 10.0.40.0/24 -j ACCEPT
-A FORWARD -i enp2s0f0 -s 10.0.40.0/24 -o eno1 -d 172.31.0.0/24 -j ACCEPT

관련 정보