본문 바로가기
IT/Etc

한대의 pc(서버)에서 리버스 프록시를 사용하어 두개의 망연결

by 조병희 2025. 3. 7.

내부망과 외부망의 트래픽을 수용하기 위해 설정하는 내용입니다.

외부에서 접근 가능한 **두 개의 물리 NIC(외부 네트워크 2개)**를 사용하여 Nginx 리버스 프록시를 구성하려면, 각각의 NIC에 맞는 Docker 네트워크를 생성하고 두 개의 Nginx 컨테이너를 각각의 네트워크에 바인딩하면 됩니다.

1. 네트워크 구성

NIC 정보 예시

eth0: 192.168.1.100 (외부망 #1 - ISP1)

eth1: 10.10.10.100 (외부망 #2 - ISP2)

• eth0: 외부 네트워크 1 (ISP 1) → nginx-external-1

• eth1: 외부 네트워크 2 (ISP 2) → nginx-external-2

 

2. Docker 네트워크 생성

각각의 물리 NIC(네트워크 카드)에 맞춰 Docker 브리지 네트워크를 생성합니다.

# 외부망 1 (ISP1) 네트워크

docker network create \

  --driver=bridge \

  --subnet=192.168.1.0/24 \

  --gateway=192.168.1.1 \

  external_net1

 

# 외부망 2 (ISP2) 네트워크

docker network create \

  --driver=bridge \

  --subnet=10.10.10.0/24 \

  --gateway=10.10.10.1 \

  external_net2

 

3. Nginx 컨테이너 실행

1) 외부망 #1 (ISP1) 용 Nginx

docker run -d --name nginx-external-1 \

  --network external_net1 \

  --ip 192.168.1.100 \

  -p 80:80 -p 443:443 \

  -v /path/to/nginx-external-1.conf:/etc/nginx/nginx.conf \

  nginx

nginx-external-1.conf 설정

events { }

 

http {

    server {

        listen 80;

        server_name isp1.example.com;

 

        location / {

            proxy_pass http://backend_service_1;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

        }

    }

}

• eth0(192.168.1.100)에서 들어오는 요청을 처리

 

2) 외부망 #2 (ISP2) 용 Nginx

docker run -d --name nginx-external-2 \

  --network external_net2 \

  --ip 10.10.10.100 \

  -p 8080:80 -p 8443:443 \

  -v /path/to/nginx-external-2.conf:/etc/nginx/nginx.conf \

  nginx

nginx-external-2.conf 설정

events { }

 

http {

    server {

        listen 80;

        server_name isp2.example.com;

 

        location / {

            proxy_pass http://backend_service_2;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

        }

    }

}

• eth1(10.10.10.100)에서 들어오는 요청을 처리

• 포트 80과 443을 8080, 8443으로 변경할 수도 있음

 

4. 백엔드 서비스 실행

docker run -d --name backend1 --network external_net1 --ip 192.168.1.200 myapp

docker run -d --name backend2 --network external_net2 --ip 10.10.10.200 myapp

 

5. 라우팅 및 방화벽 설정

1) eth0, eth1 각각 트래픽을 적절히 라우팅

# eth0 (ISP1)에서 들어오는 트래픽을 Nginx 컨테이너로 전달

sudo ip route add 192.168.1.0/24 dev eth0

 

# eth1 (ISP2)에서 들어오는 트래픽을 Nginx 컨테이너로 전달

sudo ip route add 10.10.10.0/24 dev eth1

2) 방화벽 설정

# eth0 (ISP1)에서 포트 80, 443만 허용

sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

 

# eth1 (ISP2)에서 포트 8080, 8443만 허용

sudo iptables -A INPUT -i eth1 -p tcp --dport 8080 -j ACCEPT

sudo iptables -A INPUT -i eth1 -p tcp --dport 8443 -j ACCEPT

 

# 나머지 트래픽 차단

sudo iptables -A INPUT -j DROP

 

6. 정리

eth0 (192.168.1.100, ISP1) → nginx-external-1에서 처리 (80, 443 포트)

eth1 (10.10.10.100, ISP2) → nginx-external-2에서 처리 (8080, 8443 포트)

각각 다른 도메인 (isp1.example.com, isp2.example.com) 설정 가능

SSL 적용 가능 (certbot --nginx -d isp1.example.com -d isp2.example.com)

방화벽 설정으로 각 NIC에 대한 트래픽을 제한하여 보안 강화

 

이제 각각의 네트워크에서 들어오는 요청이 올바르게 분리되어 처리됩니다! 

 

댓글