![동일한 서버에 있는 두 개의 다른 VPN 클라이언트로 포트 전달](https://linux55.com/image/98970/%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%84%9C%EB%B2%84%EC%97%90%20%EC%9E%88%EB%8A%94%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EB%8B%A4%EB%A5%B8%20VPN%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EB%A1%9C%20%ED%8F%AC%ED%8A%B8%20%EC%A0%84%EB%8B%AC.png)
두 개의 클라이언트가 연결된 OpenVPN 서버가 있습니다. 클라이언트에는 공용 IP 주소가 없으므로 SSH를 통해 클라이언트에 액세스할 수 있는 유일한 방법은 VPN을 이용하는 것입니다.
서버를 실행하는 컴퓨터는 공용 IP 주소가 wxyz인 라우터 뒤에 있습니다. 서버의 LAN 주소는 10.0.0.5입니다. 라우터의 LAN 주소는 10.0.0.1이고 서버를 실행하는 컴퓨터(10.0.0.5)는 DMZ로 사용됩니다.
클라이언트 #1은 항상 VPN 주소 192.168.2.6을 가져오고 포트 1802에서 SSH 서비스를 실행합니다.
클라이언트 #2는 항상 VPN 주소 192.168.2.14를 가져오고 포트 1804에서 SSH 서비스를 실행합니다.
내가 원하는 것은 다음을 통해 어디에서나 이러한 클라이언트에 SSH로 연결할 수 있는 것입니다.
ssh w.x.y.z -p1802
첫 번째 고객과
ssh w.x.y.z -p1804
두 번째 클라이언트를 위해.
다음 규칙에 따라 iptables를 설정했습니다.
:OUTPUT ACCEPT [6473:428732]
-A PREROUTING -d w.x.y.z -p tcp -m tcp --dport 1802 -j DNAT --to-destination 192.168.2.6
-A PREROUTING -d w.x.y.z -p tcp -m tcp --dport 1804 -j DNAT --to-destination 192.168.2.14
이것은 내 라우팅 테이블입니다.
커널 IP 라우팅 테이블
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.2.0 192.168.2.2 255.255.255.0 UG 0 0 0 tun0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
ifconfig 출력:
[root@osrv sysconfig]# /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 80:51:EA:74:92:A5
inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4554899 errors:0 dropped:0 overruns:0 frame:0
TX packets:4568878 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1083718390 (1.0 GiB) TX bytes:1131399760 (1.0 GiB)
Interrupt:11 Base address:0xa000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:11833 errors:0 dropped:0 overruns:0 frame:0
TX packets:11833 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5197664 (4.9 MiB) TX bytes:5197664 (4.9 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.2.1 P-t-P:192.168.2.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:985135 errors:0 dropped:0 overruns:0 frame:0
TX packets:947116 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:215916038 (205.9 MiB) TX bytes:429598806 (409.6 MiB)
이와 같은 설정을 사용하면 서버에 로그인하면 두 클라이언트 중 하나로 SSH를 통해 연결할 수 있습니다.
ssh 192.168.2.6 -p 1802
ssh 192.168.2.14 -p1804
둘 다 아주 잘 작동합니다.
그러나 인터넷에서 이 작업을 수행하려고 하면 다음과 같습니다.
ssh w.x.y.z -p 1802
잘 작동하지만
ssh w.x.y.z -p 1804
응답이 없습니다.
내가 놓친 게 무엇입니까?
답변1
나는 내 자신의 질문에 답할 것이라고 생각합니다.
SNAT 규칙을 생략했습니다. 이로 인해 문제가 해결되었습니다.
-A POSTROUTING -d 192.168.2.6 -p tcp -m tcp --dport 1624 -j SNAT --to-source 192.168.2.1
-A POSTROUTING -d 192.168.2.14 -p tcp -m tcp -- dport 1626 -j SNAT --소스 192.168.2.1