두 개의 서로 다른 ISP가 있습니다. 해당 공급자에게 패킷을 배포하는 일종의 로드 밸런싱 설정을 설정하고 싶습니다. 나는 이것이 다른 라우팅 테이블을 사용하여 수행될 수 있다는 것을 알고 있지만 "다중 경로 게이트웨이"라는 것을 사용하고 싶었습니다.
파일 에서 두 인터페이스를 모두 구성했습니다 /etc/network/interfaces
. 두 연결 모두 별도로 작동합니다. 기본 게이트웨이를 아래 게이트웨이로 교체했습니다.
# ip route add default \
nexthop via 192.168.1.1 dev bond0 weight 1 \
nexthop via 10.143.105.17 dev wwan0 weight 1
iptables
두 인터페이스 모두에 가장 무도회 대상을 추가했습니다 .
iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE
또한 다음을 통해 (부분적으로) 역방향 경로 필터링을 활성화했습니다 sysctl
.
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
이 설정은 작동합니다. 패킷(연결)은 두 인터페이스를 통해 전송됩니다. 내가 이해하지 못하는 문제가 하나 있습니다.
다음 명령을 사용하여 내 IP 주소를 확인하고 싶을 때:
$ curl text.whatisyourip.org
$ curl eko.one.pl/host.php
두 경우 모두 IP 주소가 다르므로 메커니즘이 잘 작동한다는 의미입니다. 또한 에서 작동하는 것을 볼 수 있습니다 wireshark
. 하지만 예를 들어 위의 첫 번째 도메인에 여러 요청을 보내려고 하면 항상 응답으로 동일한 IP 주소를 받습니다. 따라서 특정 IP 주소로 향하는 패킷은 항상 동일한 인터페이스를 통과하는 것처럼 보입니다. 왜 그런지 궁금합니다. 이전 요청의 대상 IP 주소를 기억하고 동일한 인터페이스를 통과하도록 동일한 주소에 대한 다음 요청을 수행하는 메커니즘이 있습니까?
답변1
문제를 해결했습니다. ~ 안에이 링크다음 내용을 읽을 수 있습니다.
IPv4: 해시 기반 다중 경로 라우팅. 3.6에서 라우팅 캐시가 제거되었을 때 IPv4 다중 경로 알고리즘은 다소 대상 기반에서 패킷별 준 무작위 스케줄링으로 변경되었습니다. 이로 인해 순서가 잘못된 패킷의 위험이 증가하고 애니캐스트 서비스와 함께 다중 경로를 사용할 수 없게 되었습니다. 이번 릴리스에서는 다중 경로 라우팅 구현이 소스 및 대상 주소 병합 커밋에 대한 해시를 기반으로 하는 흐름 기반 로드 밸런싱으로 대체되었습니다.
따라서 커널 3.6에서 캐시가 제거되었음에도 불구하고 요청은 여전히 캐시되고 있습니다. 이제 소스와 대상 주소가 중요합니다. 이것이 바로 패킷이 항상 동일한 인터페이스를 통과하는 이유입니다.