올바른 게이트웨이에서 요청에 응답

올바른 게이트웨이에서 요청에 응답

아주 간단한 시나리오가 있습니다. 불행히도 이 문제와 일치하는 답변을 찾지 못했습니다. 서로 다른 WAN(192.168.0.70 및 192.168.0.80)에 대해 두 개의 Linux 라우터(=게이트웨이)가 있습니다. 둘 다 포트 50000을 Linux 서버 192.168.0.60으로 전달합니다. 서버에는 기본 게이트웨이가 192.168.0.70인 인터페이스가 하나만 있습니다. 추가 구성이 없으면 다음과 같은 동작이 발생합니다.

192.168.0.70을 통한 수신 요청 -> 응답 작동(기본 게이트웨이로 인해)

192.168.0.80을 통한 수신 요청 -> 응답에 192.168.0.70이 걸리기 때문에 작동하지 않습니다.

192.168.0.80을 통한 요청이 192.168.0.80을 통해 다시 전송되도록 관리하려면 어떻게 해야 합니까?

답변1

새로운 연결을 마커로 표시한 다음 마커를 기준으로 나가는 패킷을 구별하고 두 라우팅 테이블 중 하나를 사용하여 적절한 게이트웨이로 라우팅해야 합니다. CONNTRACK 모듈을 로드해야 할 수도 있습니다.

          modprobe ip_conntrack

MAC70을 게이트웨이의 MAC 주소 192.168.0.70으로 부르고 MAC80을 MAC 주소 192.168.0.80으로 부르겠습니다. 그 다음에

       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2

이 두 규칙은 두 개의 간단한 마커를 사용하여 들어오는 새 연결(TCP 프로토콜의 경우 필요한 경우 수정)을 표시합니다. 마커는 전체 연결에 대한 것입니다.이 초기 패킷에 속하는 ESTABLISHED, RELATED 유형의 모든 후속 패킷에는 동일한 표시가 있습니다.

각 패킷의 소스 IP 주소는 연결을 시작하는 클라이언트의 IP 주소이므로 게이트웨이의 MAC 주소를 기준으로만 구별할 수 있습니다.~ 아니다게이트웨이의 것. 따라서 Wi-Fi 프레임은 MAC 주소를 전달하지 않기 때문에 이는 이더넷 연결에만 적용됩니다.

지금

       ip rule add fwmark 1 table router70
       ip rule add fwmark 2 table router80

이 두 명령은 연결/패킷 표시에 따라 사용할 라우팅 테이블(두 개 중)을 지정합니다.

이제 두 개의 라우팅 테이블을 설정했습니다.

        echo 200 router70 >> /etc/iproute2/rt_tables
        echo 201 router80 >> /etc/iproute2/rt_tables
        ip route add 192.168.0.0/24 dev eth0 table router70
        ip route add 192.168.0.0/24 dev eth0 table router80
        ip route add default via 192.168.0.70 table router70
        ip route add default via 192.168.0.80 table router80

이는 이더넷 NIC가 eth0이라고 가정하고 그렇지 않으면 그에 따라 변경합니다. 다른 모든 포트 및/또는 프로토콜에 대한 라우팅은 무엇이든 이미 가지고 있는 라우팅으로 유지됩니다.

이제 끝났습니다.

관련 정보