127.1.1.1:10000과 같은 특정 IP 주소/포트에 요청을 보내는 Alpine에서 실행되는 애플리케이션이 있습니다. 특정 IP 주소/포트를 변경할 수 없습니다. 액세스하려는 서비스는 216.58.193.64:80(Google 홈페이지 주소)과 같은 다른 IP 주소/포트에 있습니다.
트래픽 아웃바운드 요청을 127.1.1.1:10000에서 실제 주소 216.58.193.64:80으로 리디렉션하는 방법을 찾고 있습니다. 이 리디렉션은 양방향입니다. 즉, 애플리케이션이 요청하고 응답을 기대합니다.
그래픽적으로는
Alpine (with --cap-add=NET_ADMIN)
IP assigned
╔════════════════════════════════════╗ ╔══════════════════╗
║ ║ ║ ║
║ ┌──────────────────────────────┐ ║ -request-> ║ Remote ║
║ │ Application │ ║ ║ service ║
║ │ requests at 127.1.1.1:10000 | ║ ║ at ║
║ └──────────────────────────────┘ ║ <-reply- ║ 216.58.193.64:80 ║
║ ║ ║ ║
╚════════════════════════════════════╝ ╚══════════════════╝
iptables를 사용하려고 합니다.
iptables -t nat -I OUTPUT --destination 127.1.1.1 -j DNAT --to-destination 216.58.193.64
iptables, 쿼리 시 OUTPUT만 포함됩니다.
Chain OUTPUT (policy ACCEPT 7 packets, 345 bytes)
num pkts bytes target prot opt in out source destination
1 10 586 DNAT all -- * * 0.0.0.0/0 127.1.1.1 to:216.58.193.64
그런 다음 기준으로 시도합니다.
curl 216.58.193.64
답장은
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
그러나 내가 시도할 때
curl -v 127.1.1.1
그러면 컬이 반환되지 않고 출력도 없습니다. 신고 후 중지:
curl -v 127.1.1.1
* Trying 127.1.1.1:80...
* TCP_NODELAY set
나는 또한 POSTROUTING을 시도했다
iptables -t nat -A POSTROUTING --destination 127.1.1.1 -j SNAT --to-source 216.58.193.164
그러나 나는 같은 결과를 얻습니다.
답변1
@ibrahim은 부분적으로 정확하지만 분명히 불완전합니다.
~에서https://serverfault.com/questions/247623/iptables-redirect-local-connections-to-remote-system-port, 다음 작품
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 10000 -j DNAT --to-destination 216.58.193.164
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
그런 다음 다음을 실행할 수 있습니다.
curl 216.58.193.164:10000
올바른 결과를 얻으십시오.
컨테이너에서 실행하는 경우 다음 명령을 사용하여 컨테이너를 시작해야 한다는 점에 유의하는 것도 중요합니다.--privileged
답변2
기본적으로 Nat은 lo 주소에 대해 비활성화되어 있습니다. 다음을 통해 활성화해야 합니다.
sudo sysctl net.ipv4.conf.all.route_localnet=1
또한 이를 영구적으로 만들려면 /etc/sysctl.conf에 추가하십시오.