
네트워크 게이트웨이/"라우터"로도 사용하는 Linux 서버 시스템이 있습니다. 여기에는 세 개의 네트워크 인터페이스가 활성화되어 있습니다. 두 개의 네트워크 인터페이스는 서로 다른 ISP를 통해 인터넷에 연결되어 있고 세 번째 인터페이스는 NAT를 통해 내 로컬 컴퓨터에 인터넷 액세스를 제공합니다. WAN 링크 간에 로드 밸런싱이 있습니다.
서버에서는 네트워크에 정상적으로 액세스할 수 있습니다. 모든 것이 작동하고 로드 밸런싱이 작동하며 일반적으로 패킷 손실이 없습니다. 서버와 로컬 컴퓨터 간의 연결도 완전히 잘 작동합니다. 하지만 로컬 컴퓨터에서 서버를 통해 인터넷/WAN에 액세스하면 항상 ~40%의 지속적인 패킷 손실이 발생합니다. 이로 인해 연결이 매우 불안정해집니다. 약간의 조사를 통해 두 인터페이스를 통해 들어오는 패킷을 거의 동일하게 수신(및 손실)한다는 것을 알 수 있었습니다.~ 아니다인터페이스 중 하나가 모든 패킷을 잃어 다른 모든 것을 끌어내리는 것과 같습니다.
두 개의 WAN 링크 중 하나를 비활성화하면 이 패킷 손실이 즉시 사라집니다. 두 WAN 링크를 다시 활성화하면 즉시 다시 나타납니다.
이 문제의 원인은 무엇입니까? WAN 링크 중 하나를 포기하지 않고 이 문제를 해결하는 방법에 대한 힌트가 있습니까?
내 iptables
필터 테이블:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
내 iptables
NAT 테이블:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.42.0.0/24 !10.42.0.0/24
내 iptables
맹글 테이블:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 mark match ! 0x0
MARK all -- 0.0.0.0/0 0.0.0.0/0 state NEW MARK set 0x2
MARK all -- 0.0.0.0/0 0.0.0.0/0 state NEW statistic mode random probability 0.50000000000 MARK set 0x1
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
ip route show
산출:
default
nexthop via 10.7.0.254 dev eth0 weight 1
nexthop via 78.62.255.254 dev eth2 weight 1
10.7.0.0/16 dev eth0 proto kernel scope link src 10.7.5.102
10.42.0.0/24 dev eth1 proto kernel scope link src 10.42.0.254
78.62.192.0/18 dev eth2 proto kernel scope link src 78.62.239.10
169.254.0.0/16 dev eth1 scope link metric 1000
모든 것이 그대로 편집되지 않습니다. 이 경우에는 "개인 정보 보호"에 크게 신경 쓰지 마세요.
답변1
표시된 표에 따르면 NAT가 시작된 것과 동일한 인터페이스로 흐름이 계속 나가도록 하기 위해 아무 것도 하지 않고 있습니다. 즉, 나가는 패킷의 대략 절반이 잘못 번역될 수 있음을 의미합니다.
NAT 로드 밸런싱을 올바르게 수행하려면 맹글 테이블에 새 흐름을 1 또는 2로 무작위로 표시하는 사전 라우팅 규칙이 필요하고, ip rule
1로 표시된 패킷을 WAN 인터페이스 1로, 2로 표시된 패킷을 WAN 인터페이스 2로 라우팅하는 규칙이 필요합니다. , iptables
NAT 테이블에는 각 WAN 인터페이스마다 하나씩 별도의 SNAT 규칙이 필요합니다 .
자세한 설명은 다음을 참조하세요. Diego Lima의 Iptables 로드 밸런싱 요약