두 서브넷 간의 iptables 연결

두 서브넷 간의 iptables 연결

게이트웨이로 사용하려는 Linux 시스템과 A 및 B라는 두 개의 다른 시스템이 있습니다. 게이트웨이 머신은 eth0, eth1 및 eth2입니다. eth1은 머신 A에 연결되고 eth2는 머신 B에 연결됩니다. A에서 B로 또는 그 반대로 핑을 보낼 수 있기를 원합니다. 나는 다음을 사용하여 이 작업을 시도했습니다 iptables.

iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

하지만 ping을 시도하면 "호스트에 연결할 수 없습니다"라는 메시지가 나타납니다.

내가 달릴 때

iptables -L -n -V

전달 규칙에 0개의 패킷과 0바이트가 있음을 알 수 있습니다. 이제 나는 아마도 더 많은 것을 놓치고 있다는 것을 알고 있지만 전달 체인이 결코 도착하지 않는 것 같습니다. 문서에 따르면 목적지가 아닌 경우 포워딩 체인으로 들어갑니다.

편집 1:
iptables를 정리하고 다음 명령을 사용하여 처음부터 시작했습니다.

    iptables -A FORWARD  -i eth1 -o eth2 -j ACCEPT
    iptables -A FORWARD  -i eth2 -o eth1 -j ACCEPT

    iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-destination y.y.y.y
    iptables -t nat -A PREROUTING -i eth2 -j DNAT --to-destination x.x.x.x

    iptables -t nat -A POSTROUTING -o eth2 -d y.y.y.y -j SNAT --to-source x.x.x.x
    iptables -t nat -A POSTROUTING -o eth1 -d x.x.x.x -j SNAT --to-source y.y.y.y

여전히 "네트워크에 액세스할 수 없습니다"라는 메시지가 나타납니다.

답변1

iptables당신의 오해는 전달이 작동하는 방식이라고 생각하는 것 같습니다 .

첫 번째 예에서 사용한 규칙은 전달만 허용합니다. 전달은 기본적으로 이미 허용되므로 이러한 규칙은 나중에 제공되는 일반 거부 규칙에 대한 예외로만 의미가 있습니다.

패킷 전달을 활성화하면됩니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

물론, 귀하의 게이트웨이는 A및 둘 다의 기본 게이트웨이 B이거나 적어도 서로 연결되는 게이트웨이여야 합니다. 따라서 전달이 활성화된 상태에서 작동하지 않으면 세 시스템 모두에 라우팅 테이블을 포함해야 합니다.

관련 정보