
저는 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
대답은 구성과 연관되어 있으므로 몇 가지 가정을 합니다. 실제 구성에 맞게 답변을 조정해야 합니다.
완1의 LAN 및 게이트웨이완184.114.7.0/24 및 84.114.7.254로 임의로 선택되었습니다.
방화벽 규칙을 고려하지 않았지만 이 모든 것이 방화벽 규칙과 상호 작용해서는 안 됩니다.
리눅스에서ip link
,ip address
그리고ip route
ifconfig
더 이상 사용되지 않는 및 대신 항상 사용해야 합니다 route
. route
어쨌든 추가 라우팅 테이블을 처리할 수 없을 수도 있습니다.
참고로,iptables아니면 실제로넷필터, 라우팅하지는 않지만 해당 작업을 통해 IP 라우팅 스택에서 내린 라우팅 결정을 변경할 수 있습니다. 이것개략도라우팅 결정이 발생할 수 있는 위치를 보여줍니다. 한 곳에서만 발생하고 변경이 발생하기 전에 발생해야 하는 라우팅된(로컬에서 시작되지 않은) 트래픽의 경우:원시/사전 라우팅,맹글/라우팅 전또는nat/미리 라우팅 중, 와 함께날것의종종 비실용적이며,낫제한된 경우에만 대부분 떠나는 경우압착 롤러.
ㅏ기본 멀티 홈 시스템, 인터넷에 대한 여러 경로를 사용하려면 일반적으로 다음이 필요합니다.정책 라우팅여기서 경로는 평소와 같이 대상뿐만 아니라 소스 또는 정책 규칙에 사용되는 다른 선택기(여기서 수행됨)로도 변경될 수 있습니다. Linux에서는 다음을 사용하여 추가 규칙을 만듭니다.ip rule
예를 들어 다른 기본 경로를 선택하기 위해 다른 라우팅 테이블을 선택할 수 있습니다(기본 경로는 여전히 하나만 있지만라우팅 테이블당).
그래서 여기에 원칙이 있습니다. 여전히 활성 상태를 유지하면서엄격한 역방향 경로 전달(rp_필터)는 다음에서 오는 패킷을 수락하는 것입니다.완1평소와 같이 경로를 지정합니다.eth0대체 테이블 사용(통과 가능)rp_필터). 이 추가 라우팅 테이블은 기본 라우팅 테이블과 중복되어야 하지만 대체 경로에 필요한 경로만 사용해야 합니다(완1) 따라서 "일반" 경로(완0). VPN 등의 다른 경로가 통과하는 흐름에 포함되어야 하는 경우완1, 경로도 추가해야 하거나 이에 대처하기 위해 다른 추가 규칙과 테이블을 만들어야 할 가능성이 있습니다.
Linux는 커널 3.6에서 라우팅 캐시의 사용을 중단했기 때문에 라우팅 스택의 어떤 것도 다음에서 응답 패킷을 다시 보내도록 지시하지 않습니다.호스트1통해 클라이언트에게완1그러면 그들은 결국 다음을 통해 주요 기본 경로를 사용하게 될 것입니다.완0, 이 인터페이스에 대해 잘못된 IP로 NAT되었습니다(넷필터경로에 구애받지 않으며 연결의 첫 번째 패킷을 수신할 때 수행할 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