나는 wan과 lan(192.168.0.1)이라는 두 개의 인터페이스가 있는 데비안 상자를 가지고 있습니다. lan:80에는 로컬 네트워크에서 액세스해야 하는 사이트가 있습니다. 또한 wan:777에서 사이트에 액세스해야 합니다. 내 iptables 규칙은 다음과 같습니다.
iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
그러나 이것은 작동하지 않습니다. INPUT 에서 제거한 경우에만 작동합니다 -i $LAN
. 내 말은 이것이다:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
그러나 사이트가 이제 wan:80에도 있기 때문에 이것은 나쁜 접근 방식입니다. 이는 제가 원하는 것이 아닙니다. 내 실수는 무엇입니까?
답변1
당신은 시도 할 수 있습니다iptables -A INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT
이건 잘못된 사용법이에요iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
답변2
웹 서버가 포트 80에서 수신 대기 중인 경우 INPUT 체인에서 해당 포트를 활성화해야 합니다. 대상 포트에 도달이 허용되지 않으면 NAT로는 충분하지 않습니다. 따라서 소스 인터페이스가 제한되지 않으면 NAT가 작동할 수 있습니다.
목적지가 같으니 WAN:777 포트에 다른 가상호스트를 정의할 수는 없나요?
답변3
나는 답을 얻었다러시아 리눅스 포럼:
iptables -t mangle -A PREROUTING -i $WAN -p tcp --dport 777 -j MARK --set-mark 0x1234
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A INPUT -m mark --mark 0x1234 -j ACCEPT