공용 IP 및 포트에서 LAN IP로의 IPTable

공용 IP 및 포트에서 LAN IP로의 IPTable

내 서버에 대해 3개의 공용 IP를 소유하고 있으며 자체 '작업'이 있는 VM이 ​​여러 개 있습니다. 서버에는 1개의 NIC가 있습니다. 공용 IP:

  • XX.XX.9.247(메인)
  • XX.XX.21.141(추가)
  • XX.XX.21.142(추가)

LAN IP:

  • 10.10.0.0/24
  • 10.10.0.10:80 (MAIN IP용 웹서버)
  • 10.10.0.20:80 (1. 추가 IP용 웹서버)
  • 10.10.0.30:80 (2. 추가 IP용 웹서버)
  • 10.10.0.31:9987 (2. 추가 IP용 TeamSpeak)

등등.

예: 요청은 XX.XX.21.141:80에서 발생합니다. 요청은 10.10.0.20:80으로 전송됩니다. 가상 서버는 XX.XX.21.141을 통해 패킷을 다시 보냅니다.

내가 왜 그런 짓을 하는 걸까? 왜냐하면 가상 서버를 임대하고 싶기 때문입니다.

하나의 공용 IP에서 IPTable을 사용하여 이를 달성하는 방법을 알고 있지만 여러 공용 IP에서 이를 수행하는 방법을 모릅니다.

너희들이 나를 도울 수 있기를 바랍니다.

인사말

답변1

http/https만 리디렉션하려는 경우 사용자 nginx가 더 좋습니다(그러나 apache도 가능). 웹 서버가 무엇인지(Apache, NGinx)에 따라 프런트 엔드 서버에서 HTTP 프록시를 고려해야 합니다.

브리지를 사용하여 일부 VM 전용 IP를 제공할 수 있습니다.

IPtables 솔루션

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 80  ________               |               |
(    internet    )------------>[_...__...°]------------->|      VM       |
 '-(          ).-'    XX.XX.9.247    ^   10.10.0.10      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

이것은 스크립트입니다

#!/bin/sh
# eth1 is WAN
WAN=eth1
MAIN_IP=XX.XX.9.247
MAIN_PORT=80
BACK_END_IP=10.10.0.10
BACK_END_PORT=80

echo 1 > /proc/sys/net/ipv4/ip_forward
# it's clean all tables
iptables -F
iptables -t nat -F
iptables -X

iptables -t nat -A PREROUTING -i ${WAN} -d ${MAIN_IP} --dport ${MAIN_PORT} -j DNAT --to-destination ${BACK_END_IP}:${BACK_END_PORT}
iptables -A FORWARD -d ${MAIN_IP} --dport ${MAIN_PORT} -j ACCEPT
#maybe this# iptables -A FORWARD -i ${WAN} -j ACCEPT

iptables -t nat -A POSTROUTING -j MASQUERADE

관련 정보