공용 IP가 있는 네트워크 카드가 2개 있습니다. 2개의 서비스를 운영하고 있습니다. 그렇다면 연결을 어떻게 라우팅합니까?
현재로서는 하나의 인터페이스 IP만 작동하지만 둘 다 인터넷에서 핑할 수 있습니다.
내 라우팅 테이블은 다음과 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.128.1 0.0.0.0 UG 0 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.31.128.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.31.129.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
그럼 작동하려면 무엇을 추가해야 할까요?
현재 eth1은 아무런 문제 없이 작동합니다.
답변1
인터페이스 이름과 "iproute2" 태그 때문에 Linux라고 가정합니다.
단순히 기본 경로를 지정하면 나가는 모든 트래픽이 해당 인터페이스를 통과하게 되며 다른 인터페이스에서 온 요청에 대한 응답도 통과하게 되므로 이는 작동하지 않습니다.
귀하의 경우 공용 IP가 있다고 말하고 있지만 직접 연결된 두 인터페이스는 개인 IP 주소를 사용하므로 NAT가 진행 중임을 의미한다고 가정합니다. NAT를 사용할 때마다 패킷이 NAT 상자에 의해 들어오는 도중에 변경되어 동일한 방식으로 변경되어야 하기 때문에 들어오고 나가는 패킷이 다른 경로를 취하는 이러한 유형의 삼각 라우팅을 사용할 수 없습니다. 나가는 길에. 요청 클라이언트는 예상하지 못한 IP 주소로부터 패킷을 수신하게 되었으며 응답을 인식하지 못합니다.
당신이 해야 할 일은 인터넷을 향한 172.31.128.0/24의 인터페이스에서 시작되는 IP 주소를 가진 모든 패킷이 172.31.128.1의 게이트웨이에 도달하고 그에 따라 172.31.129.0/24 서브넷에 도달해야 함을 운영 체제에 알리는 것입니다. .
이는 다음과 같이 수행할 수 있습니다.
ip route add 172.31.129.0/24 dev eth0 src 172.31.129.XXX table T1
ip route add default via 172.31.129.1 table T1
ip route add 172.31.128.0/24 dev eth1 src 172.31.128.XXX table T2
ip route add default via 172.31.128.1 table T2
ip rule add from 172.31.129.XXX table T1
ip rule add from 172.31.128.XXX table T2
XXX를 해당 로컬 서브넷에 있는 서버의 IP 주소로 바꿔야 합니다.
그러면 시작해야 합니다. 이 주제에 대한 자세한 내용은 다음에서 찾을 수 있습니다.Linux 고급 라우팅 및 트래픽 제어 HOWTO 섹션 4.2.