대체 아웃바운드 IP 주소로 트래픽 경로 재지정

대체 아웃바운드 IP 주소로 트래픽 경로 재지정

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에 추가하십시오.

관련 정보