저는 Gentoo Linux를 실행하고 있으므로 일반 iptbales를 사용하여 방화벽과 네트워킹을 관리합니다. 나는 일반적으로 모든 트래픽에 wan0을 사용하지만 이미 웹 서버가 있으므로 두 번째 웹 서버에 wan1 (다른 도메인에 바인딩)을 원합니다.
세 가지 인터페이스가 있습니다.
게이트웨이에 대한 몇 가지 정보
> 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를 사용합니다.
내가 이것을 어떻게 관리 할 수 있는지 어떤 제안?
미리 감사드립니다, Rob
대답은 구성과 관련이 있으므로 몇 가지 가정을합니다. 실제 구성에 맞게 대답을 조정해야합니다.
WAN1 용의 LAN 및 게이트웨이 WAN1은 임의로 84.114.7.0/24 및 84.114.7.254 선정.
방화벽 규칙을 고려하지 않았지만이 모든 것이 규칙과 상호 작용해서는 안됩니다.
리눅스 ip link
, ip address
그리고 ip route
항상 사용 대신에 사용되지해야 ifconfig
하고 route
. route
어쨌든 추가 라우팅 테이블을 처리 할 수 없습니다.
알림처럼 iptables 또는 실제로 netfilter 는 라우팅하지 않지만 작업에 의해 IP 라우팅 스택에서 내린 라우팅 결정을 변경할 수 있습니다. 이 회로도 는 라우팅 결정이 발생할 수있는 위치를 보여줍니다. 한곳에 만있는 라우팅 된 (로컬에서 시작된 것이 아닌) 트래픽의 경우, raw / PREROUTING , mangle / PREROUTING 또는 nat / PREROUTING , raw / PREROUTING , mangle / PREROUTING 또는 nat / PREROUTING , 원시는 종종 비실용적이며 제한된 경우에만 nat 는 대부분 mangle을 남깁니다 .
기본 멀티 홈 시스템은 일반적으로 필요, 인터넷에 여러 경로를 사용하는 정책 라우팅 경로가 평소와 같이 대상으로뿐만 아니라 변경할 수있는뿐만 아니라 (여기에 완료 될 것이다)에 사용되는 소스 또는 다른 선택기와, 정책 규칙. Linux에서로 만든 추가 규칙은 ip rule
다른 라우팅 테이블을 선택하여 예를 들어 다른 기본 경로를 선택할 수 있습니다 (아직 기본 경로는 하나만 있지만 라우팅 테이블 당 하나 ).
활성 상태로 유지하면서 그래서 여기에 원칙은 엄격한 리버스 경로 포워딩 ( rp_filter를 )에서 오는 패킷 동의하는 것입니다 WAN1 과 대한 평소와 같이 경로를 eth0를 (통과 할 수 있도록 대체 테이블을 사용하여 rp_filter를 ). 이 추가 라우팅 테이블은 기본 라우팅 테이블을 복제해야하지만 대체 경로 ( wan1 )에 필요한 경로 만 사용 하므로 "일반"경로 ( wan0 )가 있는 일반 경로는 포함되지 않습니다 . wan1을 통과하는 흐름에 다른 경로 (VPN 등)가 포함되어야하는 경우, 경로도 추가해야하거나 이에 대처하기 위해 다른 추가 규칙 및 테이블을 만들어야 할 가능성이 있습니다.
Linux가 커널 3.6에서 라우팅 캐시 사용을 중단했기 때문에 라우팅 스택의 어떤 것도 wan1을 통해 host1 에서 클라이언트 로 응답 패킷을 다시 보내도록 지시하지 않으며 결국 wan0을 통해 기본 기본 경로를 사용하여 나가게 됩니다. 이 인터페이스에 대한 잘못된 IP ( netfilter 는 경로에 구애받지 않고 연결의 첫 번째 패킷을 수신 할 때 수행 할 NAT를 이미 선택 했음) 및 Strict Reverse Path Filtering을 수행하는 ISP의 다음 라우터에 의해 삭제되었을 수 있습니다. conntrack 마크에있는 패킷 마크를 복사하여 다시 패킷에 넣을 수 있는 netfilter 기능이 있습니다. 이것은 연결을위한 경로 메모리 역할을합니다. 그래서 iptables 와netfilter 의 conntrack 은 라우팅 결정을 변경하기 위해 패킷을 표시하고 동일한 연결의 일부로 식별 된 응답 패킷에이 표시를 복원하는 두 가지 관련 기능에 사용됩니다.
이 모든 것이 다음 명령으로 변환됩니다.
라우팅 부품
표시된 패킷 (임의 표시 값 101)에 추가 라우팅 테이블 (관련없는 임의 값도 101) 사용 :
ip rule add fwmark 101 lookup 101
wan0 항목을 뺀 기본 라우팅 테이블 과 유사한 항목으로 테이블을 채 웁니다 .
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 / netfilter 부분
다음 명령에서 다양한 최적화가 가능합니다. 아마도 개선 될 수 있습니다.
이미 저장된 잠재적 이전 표시를 복원하므로 응답 패킷은 원래 패킷과 동일한 표시를 갖게됩니다.
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
위의 라우팅 결정을 변경하려면 wan1 에서 도착하는 패킷을 표시하십시오 .
iptables -t mangle -A PREROUTING -i wan1 -j MARK --set-mark 101
표시가있는 경우 conntrack에 저장합니다 ( 모든 패킷이 아닌 연결 흐름 당 한 번만 수행 하도록 nat 테이블에서 수행 할 수 있음).
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j CONNMARK --save-mark
이 문서화되지 않은 기능 이 2010 년에 추가 되었기 때문에 실제로 이것은 Strict Reverse Path Forwarding 검사에 여전히 실패합니다 . 여기에서 사용해야합니다.
sysctl -w net.ipv4.conf.wan1.src_valid_mark=1
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다