두 개의 openvpn 서버 간에 트래픽을 라우팅하려고 합니다. 나는 다음과 같은 연결을 원합니다.
클라이언트 --> OpenVpnServer1 --> OpenVpnServer2 --> 인터넷
두 서버가 별도로 실행되고 작동하지만 iptables를 사용하여 모든 클라이언트 트래픽을 OpenVpnServer2로 전달하도록 OpenVpnServer1을 구성하려고 시도했지만 실패했습니다.
OpenVpnServer1 인터페이스 및 구성:
eth0 -- 공용 인터넷
tun0 - 이 서버에 연결하는 클라이언트용
tun1 - 두 번째 서버에 대한 연결 인터페이스(openvpn 클라이언트를 사용하여 연결될 때 활성화됨)
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.0.0/8 -o eth0 -j MASQUERADE
COMMIT
OpenVpnServer2 인터페이스 및 구성:
ens33 -- 공용 인터넷
tun0 - 이 서버에 연결하는 클라이언트용
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o ens33 -j MASQUERADE
COMMIT
업데이트:
server1과 sever2 사이의 연결을 테스트했으며 server1은 tun1 어댑터에서 Google에 ping을 보낼 수 있습니다. 문제는 server1의 기본 경로를 변경하지 않고 트래픽을 전달하는 방법을 모른다는 것입니다. 기본 경로를 tun1로 변경하면 클라이언트가 server1에 연결할 수 없습니다.
답변1
좋습니다. 먼저 몇 가지 기본 사항을 알아보세요. 클라이언트는 Server1에 대한 VPN 연결을 엽니다. 서버는 server2에 대한 활성 연결을 갖고 있으며 이 연결은 기본 경로로 구성되어 있습니다(그렇게 하였습니까?)
우선, server1과 server2 사이의 이 터널을 사이트 간 VPN으로 구성하겠습니다. 하지만 이는 다른 주제입니다.
server1에서 iptables 규칙이 잘못되었습니다. 올바른 규칙은 다음과 같습니다.
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
왜?
이 설정이 작동하도록 하려면 server1에서 server2로 VPN 터널을 통과하는 모든 트래픽이 server1에 의해 시작되고 세부적으로 tun1 인터페이스의 IP를 가지고 있다고 가정해야 합니다. 그러면 응답이 server1에 도달하고 클라이언트로 올바르게 다시 라우팅되었습니다. 그것이 바로 규칙이 하는 일입니다. 이와 대조적으로 귀하의 규칙은 VPN을 통하지 않고 공용 인터넷으로 나가는 모든 트래픽만 가장합니다.