![OpenVPN 터널을 사용한 포트 전달](https://linux55.com/image/158700/OpenVPN%20%ED%84%B0%EB%84%90%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%ED%8F%AC%ED%8A%B8%20%EC%A0%84%EB%8B%AC.png)
openvpn을 사용하여 사이트 간을 다른 서버로 터널링하여 웹 서버를 숨기려고 합니다.
아키텍처는 다음과 같습니다.
SERVER1 SERVER2
WEBSERVER <=> (OPENVPN CLIENT) <=> PEOPLE
(OPENVPN SERVER) Private IP: 10.8.0.2
Private IP: 10.8.0.1
물론 SERVER1과 SERVER2는 둘 다 공용 IP(WAN에 연결됨)를 갖고 있으며 개인 IP는 VPN과 연결하는 데 사용되는 IP를 나타냅니다.
사람들이 SERVER1 공용 IP를 숨기고 SERVER2를 통해 SERVER1의 웹 서버에 액세스하기를 원합니다.
openvpn을 사용하여 사이트 간 터널을 만들었으므로 SERVER2에서 openvpn 개인 IP를 사용하여 SERVER1의 웹 서버에 액세스할 수 있지만 SERVER2 공용 IP에서는 액세스할 수 없습니다.
도움을 주셔서 미리 감사드립니다!
IP 출력
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 9a:63:f1:37:d8:f5 brd ff:ff:ff:ff:ff:ff
inet PUBLIC_IP/20 brd PUBLIC_IP
scope global eth0
valid_lft forever preferred_lft forever
inet 10.19.0.5/16 brd 10.19.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a03:b0c0:3:e0::c4:6001/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::9863:f1ff:fe37:d8f5/64 scope link
valid_lft forever preferred_lft forever
40: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.2 peer 10.8.0.1/32 scope global tun0
valid_lft forever preferred_lft forever
답변1
Server2(포트 80 및/또는 443)로 들어오는 트래픽을 Server1의 OpenVPN tun IP 주소로 리디렉션해야 합니다.
이를 수행하는 방법은 여러 가지가 있습니다. 나는 개인적으로 과거에 다음과 같은 일을 했습니다.
옵션 1: Server2에서 웹 서버를 실행하고 모든 요청을 두 포트 모두에 대해 "로컬" IP 주소 10.8.0.1로 전달합니다. 웹 서버는 요청을 캐시할 수도 있는데, 이것이 유리하다고 생각합니다.
옵션 2: IP 전달을 사용합니다(오버헤드 감소). 서버 2에서:
sysctl net.ipv4.ip_forward=1
그런 다음 앞으로(*):
iptables -t nat -A PREROUTING -p tcp -d PUBLIC_IP --dport 80 -j DNAT --to-destination 10.8.0.1:80
다음을 위장해야 할 수도 있습니다.
iptables -t nat -A POSTROUTING -j MASQUERADE
작동하는 경우 첫 번째 옵션을 다음 위치에 저장하세요 /etc/sysctl.conf
.
net.ipv4.ip_forward = 1
IP 테이블 규칙을 저장하세요. 배포판에 따라 다릅니다! CentOS 7에서:
mv -i /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
iptables-save > /etc/sysconfig/iptables
systemctl stop firewalld
systemctl mask firewalld
yum install iptables-services
systemctl enable iptables
지난 몇 년 동안 방화벽과 배포판 간에 많은 변화가 있었기 때문에 상황이 다를 수 있습니다.
(*) 포트 이상의 것이 필요한 경우 범위를 사용할 수 있습니다.
iptables -t nat -A PREROUTING -p tcp -d PUBLIC_IP --dport 80:1080 -j DNAT --to-destination 10.8.0.1:80-1080