Linode에서 NAT 없이 OpenVPN 클라이언트 라우팅을 달성하려면 어떻게 해야 합니까?

Linode에서 NAT 없이 OpenVPN 클라이언트 라우팅을 달성하려면 어떻게 해야 합니까?

OpenVPN 네트워크를 설정했는데 원격 클라이언트에서 내부/LAN 시스템에 액세스할 수 있다는 점에서 제대로 작동하고 있습니다. 그러나 내 문제는 원격 시스템의 모든 트래픽이 마치 클라이언트 시스템이 아닌 OpenVPN 서버 시스템에서 오는 것처럼 LAN 시스템에 나타난다는 것입니다.

더 잘 설명하려면 내 네트워크 토폴로지를 고려하십시오.

네트워크 토폴로지

머신 R은 머신 A의 OpenVPN 서버에 연결되었으며 IP 주소 10.200.200.5가 할당되었습니다.

그런 다음 Machine R은 Machine B에서 실행 중인 Apache에 요청을 보냅니다. 요청이 제대로 도착하고 응답을 받습니다. 문제는 머신 B가 10.200.200.5가 아닌 192.168.0.10(머신 A의 IP)에서 들어오는 요청을 본다는 것입니다.

나는 후자를 원한다.

내 현재 설정

기계 A

다음은 관련 iptables 규칙의 일부입니다.

*nat
:PREROUTING ACCEPT [18:1080]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -o eth0 -j MASQUERADE

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

// snip

# accept incoming VPN connections
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT

# forward VPN traffic
-A FORWARD -s 10.200.200.0/25 -d 192.168.128.0/17 -i tun0 -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

또한 ip_forwarding도 활성화했습니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

.. /etc/sysctl.conf를 적절하게 변경하여 영구적으로 만들었습니다.

OpenVPN 구성에는 다음이 있습니다.

server 10.200.200.0 255.255.255.128
push "route 192.168.0.0 255.255.255.0"

기계 B

머신 A는 머신 B의 게이트웨이가 아니므로 다음과 같이 머신 B에 경로를 수동으로 추가했습니다.

ip route add 10.200.200.0/25 via 192.168.0.10 dev eth0

어떤 IP가 라우팅되는지 테스트하기 위해 다음과 같은 작은 PHP 스크립트를 만들었습니다.showip.php:

<?php echo "Your IP is: ", $_SERVER['REMOTE_ADDR'], "\n"; ?>

기계 R

# wget -q -O - http://192.168.0.11/showip.php
Your IP is: 192.168.0.10

10.200.200.5로 표시하려면 어떻게 해야 하나요?

업데이트

명확히 하자면, 내 특별한 경우에는 머신 A에 LAN과 WAN을 모두 제공하는 하나의 NIC(eth0)가 있습니다.

답변1

내 질문에 답하기:

추가 배경 지식으로 이러한 컴퓨터는 Linode에서 호스팅됩니다. LAN의 특정 노드로 트래픽을 라우팅하기 위해 스위치에 정적 맵을 사용하는 것으로 나타났습니다. VPN 소스 IP는 정적 맵의 일부가 아니기 때문에 트래픽이 어디로도 라우팅되지 않았습니다.

따라서 이는 Linode 관련 문제로 밝혀졌지만 다른 사람들이 이를 알 수 있도록 도움이 되기를 바랍니다.

답변2

머신 A와 머신 B 사이의 연결은 실제로 스위치 이더넷이 아니며 할당된 IP 주소를 사용하여 트래픽만 처리할 수 있다는 것을 알았으므로 다른 솔루션을 찾아야 합니다.

이는 터널을 사용하여 달성할 수 있습니다. 사용할 수 있는 다양한 종류의 터널이 있습니다. 하나는 VPN을 사용하는 것인데, 머신 A가 이미 VPN 서버이기 때문에 가장 간단할 수 있습니다. 그런 다음 머신 B를 VPN 클라이언트로 만든 다음 라우팅 테이블 항목을 추가하여 해당 VPN 연결을 통해 필요한 접두사를 전달하면 됩니다.

또 다른 옵션은 GRE 터널을 사용하거나 단순히 IP over IP를 사용하는 것입니다. 이러한 터널과 관련 경로는 정적으로 구성될 수 있으므로 VPN 접근 방식에 비해 이점을 얻을 수 있습니다.

답변3

머신 A에는 패킷을 머신 B로 라우팅하기 전에 클라이언트 IP를 변경하는 NAT 규칙이 있습니다. 가장 먼저 해야 할 일은 해당 NAT 규칙을 제거하여 패킷이 수정 없이 머신 B로 전달되도록 하는 것입니다.

이 변경으로 인해 컴퓨터 B의 라우팅 테이블이 불완전한 경우 연결 작동이 중지될 수 있습니다. 이 경우 발생하는 일은 패킷이 머신 B에 올바르게 전달되지만 응답을 다시 전달할 경로가 없다는 것입니다. 그러면 전혀 응답하지 않거나 VPN 서버 대신 인터넷으로 응답을 보내게 됩니다.

머신 B에서는 다음 명령을 사용하여 경로를 추가해 볼 수 있습니다.ip route add 10.200.200.0/24 via 192.168.0.10

관련 정보