eth0에 192.168.0.2/24가 할당되고 eth1에 172.16.0.2/24가 할당된 Linux 웹 서버가 있습니다. 내가 그것을 바꿀 수 있는 방법은 없습니다. 지금까지의 경로는 다음과 같습니다.
172.16.0.0/24 dev eth1 proto kernel scope link src 172.16.0.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
172.16.0.0/16 via 172.16.0.1 dev eth1
default via 192.168.0.1 dev eth0
기본 경로는 컴퓨터가 콘텐츠를 다운로드하기 위해 액세스해야 하는 인터넷으로 연결됩니다. 172.16.0.254를 통해 인터넷에서 들어오는 패킷(요청)도 있습니다. 이러한 요청에 응답하려면 라우팅 테이블과 규칙을 어떻게 설정해야 합니까? iptables
여기서는 불가능합니다.
업데이트: 이것이 작동하는 것처럼 보이지만 나에게는 우아해 보이지 않습니다.
ip r a 172.16.0.0/24 dev eth1 table 10
ip r a 172.16.0.0/16 via 10.16.0.1 t 10
ip r a default via 172.16.0.254 t 10
ip rule add from 172.16.0.2 t 10
답변1
이를 단순 소스 기반 라우팅이라고 하며 LARTC HOWTO에 설명되어 있습니다.
http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html
원래 라우팅 테이블(기본 게이트웨이 없음)의 내용을 복사하여 붙여넣는 것이 적절하지 않다고 생각되면 이 작업을 수행할 필요가 없으며 다음과 같은 간단한 스크립트를 사용할 수 있습니다.
ip route flush table 10
ip route show table main | grep -v ^default | while read ROUTE; do ip route add table 10 $ROUTE; done
ip route add table 10 default via 172.16.0.254
ip rule add from 172.16.0.2 table 10
ip route flush cache
답변2
내 생각엔 당신이 할 수 없을 것 같아요.
애플리케이션(웹 서버)이 응답하면 이는 커널에 대한 새로운 패킷이며 라우팅 테이블을 따릅니다. 기본 게이트웨이는 여러 개 있을 수 없으며 애플리케이션이 이 응답을 보내도록 트리거하는 패킷이 도착하는 인터페이스를 기반으로 하나를 선택할 수 없습니다.
기본 게이트웨이는 하나만 사용하세요. 이와 같이 여러 서브넷에 걸쳐 NAT를 수행하지 마십시오. 네트워크 설계에 문제가 있습니다. 진짜.
이렇게 하면 포트 전달이 여기서 역할을 할 것이라고 기대하지 마십시오.