iptables가 localhost로 리디렉션됩니까?


13

네트워크 내부에서 인터넷으로 모든 연결을 라우팅하는 서버가있는 네트워크가 있다고 가정합니다. 들어오는 연결을 인터넷으로 라우팅하는 대신 로컬 호스트 포트 8080으로 라우팅하도록 iptables를 어떻게 설정할 수 있습니까? 모든 도움을 주셔서 감사합니다.


문제는 간단한 리디렉션 (대상 IP 주소 NAT)을 사용하면 원래 대상 IP 주소가 손실된다는 것입니다. 투명한 HTTP 프록시를 설정 하시겠습니까? 아니면 HTTP 이외의 다른 프로토콜도 처리해야합니까?
— pabouk

투명 여부에 관계없이
— DankMemes

프록시 모든 트래픽을 리디렉션 입니다 : 투명 프록시에 대한 기본
— pabouk

여기 정말 도움이되는 또 다른 답변이 있습니다 : unix.stackexchange.com/questions/111433/…
— Wren T.

답변:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
굵게 사용하지 마십시오 ....

감사! 나는 이것을 시도하지 않았지만 내가 놓친 것은 ip forwarding 명령이라고 생각합니다. 그리고 다음에는 굵게 표시되지 않은 코드 블록을 사용하십시오.
— DankMemes

@AlexAntonov는 코드 블록을 사용하십시오. 편집 모드에서 텍스트를 선택하고 괄호 아이콘을 클릭하십시오.
— DankMemes

@ZoveGames, 죄송합니다. 수정했습니다.
— Alex Antonov

2
나는 이것을 실험했다. ip_forward sysctl은 필요하지 않습니다. 그러나 여기 route_localnet 옵션 이 있습니다. 나는 이것이 Juan Cespedes의 대답 이 정확히 무엇인지 알 수 있습니다.
— Matt Joiner

31

이는 iptables커널> = 3.6에서만 가능합니다.

다음을 수행해야합니다.

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forward패킷이 전달되지 않기 때문에 필요하지는 않지만 sysctl을 포함하지 않으면 route_localnet(커널> 3.6에서만 작동) 패킷이 "마티니"라고 간주되어 커널에 의해 삭제됩니다. 외부에서 목적지 주소 127.0.0.1


그렇습니다, 효과가 있습니다
— Nick De Greek

route_localnet에 대해 몰랐습니다. 너무 오래된 학교이며 ip_forward가 작동하지 않는 이유를 알 수 없었습니다 (필요하지는 않았지만 어쨌든 시도한 것으로 의심 됨).
— dmourati

1
당신이 저장 확인 net.ipv4.conf.all.route_localnet=1에 /etc/sysctl.conf그렇지 않으면 지속되지 않습니다 재부팅 후 변수는 패킷이 하락의 원인이 0으로 돌아갈 것입니다. 그렇다면 왜 모든 것이 작동하지 않는지 이해하기가 매우 어려울 것입니다. ;)
— viz

죄송합니다 오래된 질문을 네크로 만의 IPv6를 동등한 존재하기 net.ipv4.conf.all.route_localnet에 사용이 ip6tables?
— Kebian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.