저는 Gentoo Linux를 실행하고 있으므로 일반 iptbales를 사용하여 방화벽과 네트워크를 관리합니다. 나는 일반적으로 모든 트래픽에 wan0을 사용하지만 이미 웹 서버가 있으므로 wan1(다른 도메인에 바인딩됨)을 두 번째 웹 서버로 사용하고 싶습니다.
세 가지 인터페이스가 있습니다.
- eth0 = LAN
- wan0 = 사용된 기본 WAN(기본 게이트웨이)
- wan1 = 보조 WAN
게이트웨이에 대한 일부 정보
> route -n
Kernel IP Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
0.0.0.0 80.108.x.x 0.0.0.0 UG 0 0 0 wan0
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
80.108.x.0 0.0.0.0 255.255.254.0 U 0 0 0 wan0
84.114.y.0 0.0.0.0 255.255.255.0 U 0 0 0 wan1
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
NAT/MASQUEARDING의 기본 초기화는 다음과 같습니다.
sysctl -q -w net.ipv4.conf.all.forwarding=1
iptables -N BLOCK
iptables -A BLOCK -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i eth0 -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i lo -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan1 -j MASQUERADE
이 게이트웨이 뒤에는 여러 웹 서버가 실행됩니다. 한 컴퓨터에서는 80 대신 포트 8000에서 HTTP 서버를 실행합니다. 일반적으로 wan0을 수신 인터페이스로 사용할 때 다음 규칙을 사용합니다.
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan0 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan0 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
좋은 결과. 이제 wan0이 내가 일반적으로 다른 목적으로 사용하는 IP/도메인에 바인딩되어 있으므로 wan1을 사용하고 싶습니다.
나는 wan1을 간단히 변경하면 문제가 해결될 것이라고 생각합니다.
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan1 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan1 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
그러나 이것은 작동하지 않습니다. 문제는 wan0이 기본 GW라는 것입니다. 그래서 wan1이 받은 패킷은 lan_host1로 전달되지만 게이트웨이로 다시 보내지면 wan1 대신 wan0을 통해 전송되거나 적어도 wan0의 IP를 사용하여 전송되는 것으로 추측됩니다.
이 문제를 어떻게 처리할 수 있는지 제안해 주실 수 있나요?
미리 감사드립니다, 롭
답변1
대답은 구성과 관련되어 있으므로 몇 가지 가정을 했습니다. 실제 구성에 맞게 답을 조정해야 합니다.
베이 1LAN 및 게이트웨이베이 1임의 선택은 84.114.7.0/24 및 84.114.7.254입니다.
방화벽 규칙은 고려되지 않지만 이들 중 어느 것도 방화벽 규칙과 상호 작용해서는 안 됩니다.
리눅스에서ip link
,ip address
그리고ip route
ifconfig
더 이상 사용되지 않는 sum 대신 항상 사용해야 합니다 route
. route
그럼에도 불구하고 추가 라우팅 테이블은 처리되지 않을 수 있습니다.
참고로,iptables아니면 실제로웹 필터, 라우팅하지는 않지만 해당 작업을 통해 IP 라우팅 스택이 내린 라우팅 결정을 변경할 수 있습니다. 이것개략도라우팅 결정이 발생할 수 있는 위치를 보여줍니다. 로컬에서 발생하지 않고 한 곳에서만 라우팅되는 트래픽의 경우 변경 사항이 다음과 같이 발생해야 합니다.원본/사전 라우팅,맹글/사전 라우팅또는nat/프리라우트, 그리고날것의종종 비실용적이며,냇제한된 경우에만 작동하며 대부분의 경우 종료됩니다.으깨다.
ㅏ기본 멀티 호스팅 시스템, 여러 인터넷 경로를 사용하려면 일반적으로 다음이 필요합니다.정책 라우팅, 여기서 경로는 평소와 같이 대상뿐만 아니라 정책 규칙에 사용되는 소스 또는 기타 선택기에 따라 달라질 수 있습니다(여기서 수행됨). Linux에서는 다음 명령을 사용하여 추가 규칙을 만듭니다.ip rule
예를 들어 다른 기본 경로를 선택하기 위해 다른 라우팅 테이블을 선택할 수 있습니다(여전히 하나의 기본 경로만 있지만라우팅 테이블당).
여기서 원칙은 여전히 활동적인 상태를 유지하는 것입니다.엄격한 역방향 경로 전달(rp_필터)는 다음에서 패킷을 수락하는 것입니다.베이 1그리고 그들에게 다음을 지시하세요이더넷 0대체 테이블을 사용하십시오(이렇게 하면 통과할 수 있습니다).rp_필터). 이 추가 경로 테이블은 기본 경로 테이블을 복제해야 하지만 대체 경로(베이 1), 따라서 "일반" 경로가 있는 일반 경로는 포함되지 않습니다(웡 0). 통과하는 트래픽에 다른 경로(예: VPN 등)가 포함되어야 하는 경우베이 1, 대부분의 경우 해당 경로도 추가해야 하거나 이 상황을 처리하기 위해 다른 추가 규칙 및 테이블을 만들어야 합니다.
Linux는 더 이상 커널 3.6의 경로 캐시를 사용하지 않으므로 라우팅 스택에는호스트 1고객에게 전달베이 1결국 기본 기본 경로를 사용하게 됩니다.웡 0, 인터페이스의 NAT에 잘못된 IP 사용(웹 필터라우팅과는 아무런 관련이 없으며 연결의 첫 번째 패킷이 수신될 때 수행할 NAT가 이미 선택되어 있음) 엄격한 역방향 경로 필터링을 수행하는 ISP의 다음 라우터에 의해 삭제될 수 있습니다. 하나 있다웹 필터conntrack 마커의 패킷 마커를 복사하여 패킷에 다시 넣는 기능을 허용합니다. 이는 연결을 위한 경로 메모리 역할을 합니다. 그래서iptables그리고웹 필터~의연결하다라우팅 결정을 변경하기 위해 패킷을 표시하고 동일한 연결의 일부로 식별된 응답 패킷에서 이 표시를 복원하는 두 가지 관련 기능에 사용됩니다.
이 모든 것은 다음 명령으로 변환됩니다.
- 라우팅 부분
태그가 지정된 패킷(임의 태그 값 101)의 경우 추가 라우팅 테이블을 사용합니다(관련 없는 임의 값도 101임).
ip rule add fwmark 101 lookup 101
비슷한 항목으로 테이블 채우기기본라우팅 테이블, 빼기웡 0기입:
ip route add table 101 192.168.0.0/16 dev eth0
ip route add table 101 84.114.7.0/24 dev wan1
ip route add table 101 default via 84.114.7.254 dev wan1
- iptables/웹 필터부분
다음 명령에는 다양한 최적화가 가능하며 여전히 개선될 수 있습니다.
저장된 이전 태그를 복원하면 응답 패킷이 원본 패킷과 동일한 태그를 갖게 됩니다.
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
다음에서 패킷 표시베이 1위의 라우팅 결정을 변경합니다.
iptables -t mangle -A PREROUTING -i wan1 -j MARK --set-mark 101
태그가 있으면 저장하세요.연결하다(다음에 있었을 수도 있어냇테이블은 패킷당이 아닌 연결 흐름당 한 번만 실행됩니다.
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j CONNMARK --save-mark
실제로 이것은 여전히 실패할 것입니다엄격한 역방향 경로 전달이것 때문에 확인하세요문서화되지 않은 기능2010년에 추가되었습니다. 여기에서 사용해야 합니다:
sysctl -w net.ipv4.conf.wan1.src_valid_mark=1