커널 >= 4.4에서 패킷별 다중 경로 IP 라우팅 구현

커널 >= 4.4에서 패킷별 다중 경로 IP 라우팅 구현

3.6 이전의 Linux 커널은 IPv4 다중 경로 라우팅을 수행하기 위해 경로 캐시를 사용했습니다. 이는 두 개의 독립적인 회선/ISP 간의 라우팅이 매우 쉽다는 것을 의미합니다. 3.6부터 알고리즘이 패킷별 계산으로 변경되었습니다. 이는 두 개의 회선/ISP를 구현하려면 일부 라우팅 테이블/규칙/iptables 마크업 트릭이 필요함을 의미합니다.

그러나 동일한 ISP를 사용하는 두 개의 회선이 있고 균형 잡힌/장애 조치 방식으로 패킷별로 두 회선을 따라 단일 IP를 라우팅할 수 있는 경우 3.6부터 회선 결합을 쉽게 구현할 수 있습니다(IP 수준에서). 각 패킷이 양방향으로 라우팅되기 때문입니다.

4.4부터,핵심이 또 바뀌었네소스 및 대상 주소의 해시를 기반으로 하는 흐름 기반 로드 밸런싱.

현재 커널 4.4.36을 실행 중이고 PPPoE 연결을 통한 다중 경로 라우팅을 사용하고 있습니다. ISP의 다운스트림 트래픽은 두 개의 개별 회로를 통해 패킷별로 라우팅됩니다(하나의 IP가 두 회로를 따라 라우팅됨). 이는 단일 회선에서 다운로드할 수 있는 것보다 더 빠른 다운로드 속도를 얻을 수 있음을 의미합니다. 내 업스트림 트래픽은 최신 흐름 기반 알고리즘을 기반으로 두 개의 ppp 장치(동일한 IP 주소 사용) 간에 라우팅됩니다. 이는 단일 와이어 속도보다 더 빠른 업로드 속도를 달성할 수 없음을 의미합니다.

패킷당 알고리즘을 사용하도록 현재 커널을 구성하는 방법이 있습니까? 이전 커널로 되돌려야 합니까(다른 여러 가지 이유로 되돌리고 싶지 않음)?

내 ISP는 다중 링크 ppp를 지원하지 않습니다.

관련이 있는 경우 현재 Arch Linux ARMv7(Raspberry Pi 3)을 실행하고 있지만 필요한 경우 Raspian으로 변경할 수 있습니다.

답변1

좋아, 이 문제를 조사하는 데 더 많은 시간을 보낸 후 Linux TEQL(True Link Equalizer)을 사용하여 이 문제를 해결하는 방법을 찾았습니다. 대략적으로 따라간 링크는 다음과 같습니다. 몇 가지 수정 사항이 있습니다.

http://lartc.org/howto/lartc.loadshare.html

이것이 Arch Linux ARMv7(Raspberry Pi 3)에서 작동하는 방법입니다.

시작에:

적절한 커널 모듈을 로드하려면 부팅 시 다음 명령을 실행해야 합니다.

modprobe sch_teql

eth0의 로컬 네트워크에서 NAT를 수행한다고 가정하면 부팅 시 다음 명령도 실행됩니다.

sysctl -w net.ipv4.ip_forward
iptables -A INPUT -i ppp+ -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -o teql+ -j MASQUERADE

FORWARD 반환 트래픽은 ppp+에 있고 POSTROUTING MASQUERADE는 teql+에 있습니다. 나가는 트래픽은 teql에서 나가고 반환 트래픽은 ppp로 돌아오기 때문입니다.

ppp 링크가 나타나면:

로드 밸런싱할 링크가 ppp라고 가정하고 스크립트에서 다음 명령을 실행합니다 /etc/ppp/ip-up.d/.

sysctl -w net.ipv4.conf.ppp1.rp_filter=2
sysctl -w net.ipv4.conf.ppp2.rp_filter=2
tc qdisc add dev ppp1 root teql0
tc qdisc add dev ppp2 root teql0
ip address add 1.1.1.1/32 dev teql0
# you can add additional public IP addresses teql0 if you need to
ip link set teql0 up
ip route replace default scope global dev teql0

1.1.1.1ISP가 공용 IP 주소를 사용하는 위치는 어디입니까? 다른 공용 IP는 teql0 장치에 할당할 수 있지만 ppp 장치에는 할당할 필요가 없습니다. 내 설정에서는 두 ppp 링크가 모두 동일한 IP를 공유합니다(pppoe 등을 통해 협상됨). teql 링크는 위에 표시된 대로 수동으로 할당됩니다. ISP는 두 링크를 통해 균등하게 IP 트래픽을 전송해야 합니다.

위 스크립트에서는 반환 패킷이 teql0 대신 ppp 인터페이스로 돌아가므로 삭제되지 않도록 역방향 경로( rp_filter)를 (loose)로 설정했습니다 .2

이렇게 설정했는데 아주 잘 작동합니다. 너무 쉽게! 링크 장애 시 원활한 장애 조치가 가능합니다. 그들이 나타나면 다시 일을 시작합니다. 장애 조치나 복구 시 패킷 손실이나 대기 시간이 없는 것 같습니다.

또한 아래 링크의 또 다른 접근 방식은 정책 라우팅을 사용하고, iptables를 사용하여 다른 모든 패킷을 표시하는 등의 것입니다. 하지만 며칠 후에 시도해 보고 위의 방법보다 더 잘 작동하는지 확인하고 그에 따른 피드백을 여기에 제공하겠습니다.

http://support.aa.net.uk/Router__Linux_upload_bonding_using_policy_routing

관련 정보