현재 포트 80에서 실행중인 NAS 상자가 있습니다. 외부에서 NAS에 액세스하려면 다음과 같이 포트 8080을 NAS의 포트 80에 매핑했습니다.
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80
이것은 매력처럼 작동합니다. 그러나 이것은 네트워크 외부 (직장, 다른 집 등)에서 웹 사이트에 액세스하는 경우에만 작동합니다. 그래서 입력 mywebsite.com:8080
하면 IPTables가 올바르게 작업하고 모든 것이 올바르게 작동합니다.
이제 내가 가진 문제는 네트워크 내부 에서이 포트를 어떻게 리디렉션 할 수 있습니까? 내 도메인 이름 mywebsite.com
은 내부 (10.32.25.1)에서 내 라우터 (내 Linux 서버)를 가리 키지 만 내부에서 1080.25.2의 포트 8080을 포트 80으로 리디렉션하고 싶습니다.
실마리?
편집 # 1
이 질문을 쉽게하기 위해이 다이어그램을 정리했습니다. 찾고있는 것이 잘못되었거나 잘못 표시되면 언제든지 업데이트하십시오.
iptables
| .---------------.
.-,( ),-. v port 80 |
.-( )-. port 8080________ | |
( internet )------------>[_...__...°]------------->| NAS |
'-( ).-' 10.32.25.2 ^ 10.32.25.1 | |
'-.( ).-' | | |
| '---------------'
|
|
__ _
[__]|=|
/::/|_|
답변
마침내 방법을 찾았습니다. 먼저, -i eth1
“외부”규칙 을 추가 해야했습니다 (eth1은 WAN 연결입니다). 또한 다른 두 규칙을 추가해야했습니다. 여기에 내가 함께 온 것 :
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
답변
또한 대상 NAT를 수행 할 수 있도록 패키지 전달이 활성화되어 있어야합니다. 기본적으로 해제되어 있으므로 iptables 규칙이 작동하지 않습니다. 다음을 발행하여 사용할 수 있습니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
답변
먼저 전달을 허용
echo 1 > /proc/sys/net/ipv4/ip_forward
그런 다음 iptable 규칙을 설정하여
IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE
/etc/rc.local
예를 들어이 줄을 넣을 수 있습니다 . 참고 : Debian jessie는 실행 파일을 만들고 rc.local 서비스를 통해 활성화했습니다.
systemctl enable rc-local.service
답변
먼저 전달이 활성화되었는지 확인해야합니다.
cat /proc/sys/net/ipv4/ip_forward
그렇지 않으면 1
을 실행 echo 1 > /proc/sys/net/ipv4/ip_forward
합니다.
포트 80 및 443에서 10.32.25.1에 도달하는 트래픽을 10.32.25.2의 80 포트로 전달하려면 아래 규칙을 사용해야합니다.
iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80