IPTables-다른 IP 및 포트로 포트 (내부에서)


10

현재 포트 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      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@slm 정확합니다. 서버가 포트 80에 있기 때문에 10.32.25.2:8080에서는 아무 것도 발생하지 않습니다. 외부에서 NAT는 지정된 IP (10.32.25.2)의 포트 8080에서 포트 80으로 리디렉션됩니다. NET-> NAT : 8080-> 10.32.25.2:80. 나는 내부의 규칙이 필요하며 거기에 무엇을 넣을 지 모른다.
David Bélanger

@slm 예. 나는 어떻게 그런 것을 성취 할 수 있는지 모른다. 로 10.32.25.1:8080리디렉션 하고 싶습니다 10.32.25.2:80. 위의 규칙은 외부에서 작동하지만 네트워크 내부에서는 작동하지 않습니다. 따라서 사무실에 있으면 website.com:8080 에서 NAS에 액세스 할 수 있으며 완전히 투명합니다. 내 집에서 website.com:8080은 내 라우터 일명 Linux 서버이기 때문에 10.32.25.1을 가리 킵니다. 포트 8080을 포트 80의 NAS로 리디렉션하지만 투명하게 다시 지정하고 싶습니다.
David Bélanger

@slm 예, 모든 것이 잘 작동합니다. 내부 네트워크에서 포트 10.32.25.1:8080을 10.32.25.2:80으로 리디렉션하고 싶습니다.
David Bélanger

또한 eth0 10.32.25.2인바운드 인터페이스를 기반으로 iptables 사용을 작성할 수 있도록 같은 인터페이스를 언급하십시오
Rahul Patil

죄송합니다. 방금 봤습니다. 이미 문제를 해결했습니다.
Rahul Patil

답변:


13

마침내 방법을 찾았습니다. 먼저, -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

2
첫 번째 규칙에 이미 포함되어 있으므로 두 번째 규칙은 필요하지 않습니다.
machineaddict

1
첫 번째 규칙은 eth1 인터페이스에 도착한 경우에만 사전 경로를 제한합니다. 두 번째 규칙은 모든 인터페이스에 적용되므로보다 일반적입니다. 루프를 조심하십시오!
tu-Reinstate Monica-dor du

4

또한 대상 NAT를 수행 할 수 있도록 패키지 전달이 활성화되어 있어야합니다. 기본적으로 해제되어 있으므로 iptables 규칙이 작동하지 않습니다. 다음을 발행하여 사용할 수 있습니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

이것에 너무 감사합니다, 나는 몇 시간 동안 내 머리카락을 뽑아 냈을 것입니다!
ColinM

3

먼저 전달을 허용

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

0

먼저 전달이 활성화되었는지 확인해야합니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.