SNAT는 실제 클라이언트 IP를 유지하기 위해 작동하지 않으며 MASQUERADE는 작동합니다.

SNAT는 실제 클라이언트 IP를 유지하기 위해 작동하지 않으며 MASQUERADE는 작동합니다.

AAA, BBB, CCC의 3개 호스트가 있습니다.

  1. 주인AAA이다OpenVPN 서비스IP가 있는 r172.17.10.1마스크 255.255.255.0.
  2. 주인BBB2개의 tun 인터페이스가 있습니다: •OpenVPN 서버IP로172.16.10.1및 마스크 255.255.255.0 •OpenVPN 클라이언트IP로172.17.10.50(OpenVPN 서버 AAA에 연결됨)
  3. 주인CCCIP가 있는 OpenVPN 클라이언트입니다172.16.10.50(OpenVPN 서버 BBB에 연결됨)172.16.10.1을 통해 172.17.10.0/24로 라우팅됩니다..

여기에 이미지 설명을 입력하세요

내 목표는 호스트 CCC가 호스트 AAA 및 호스트 AAA를 성공적으로 핑하여 호스트 CCC의 원래 IP(172.16.10.50)에서 오는 트래픽을 확인하는 것입니다.

iptables -A FORWARD... -J ACCEPT호스트 BBB에 설정했습니다 .

호스트 BBB에서 설정했습니다.포스트라우팅규칙. 예를 들어, MASQUERADE를 사용하면 ping이 성공하지만 문제는 이 방법으로 호스트 AAA가 src IP 172.17.10.50(호스트 BBB의 IP)을 본다는 것입니다. iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

MASQUERADE를 SNAT으로 변경했지만 핑이 실패합니다.: iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

문제는 tcpdump를 사용하면 트래픽이 호스트 BBB에서 나가지 않고 호스트 AAA로 향하는 트래픽이 없다는 것을 알 수 있다는 것입니다.

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

SNAT를 소스 IP 172.17.10.55로 변경하려고 했습니다.(172.17.10.0/24 네트워크의 IP 주소) 그러나 다시 ping이 실패하고 다시 트래픽이 호스트 BBB를 종료하지 않습니다.

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

--to-source 172.16.10.50 또는 --to-source 172.17.10.55와 함께 SNAT를 사용할 수 없는 이유는 무엇입니까?(동일한 172.17.10.0/24 네트워크의 IP 주소) 호스트 CCC에서 172.17.10.1로 핑을 보내나요?

트래픽은 호스트 BBB에 있는 것으로 보이며 해당 tun17에서 나가지 않습니다. 트래픽이 HOST CCC에서 HOST BBB로 이동하고 트래픽이 tun16에서 tun17로 전달되지만 SNAT를 사용하여 호스트 AAA로 보낼 수 없는 것을 확인했습니다.

ping은 패킷의 소스 IP 주소가 172.17.10.50인 경우에만 작동합니다. 예를 들어 소스 IP를 172.17.10.55로 변경하면 핑이 실패합니다.

문제는 방화벽이나 라우팅이 아닌 것 같습니다. OpenVPN 제한이 의심되지만 확실하지 않습니다. 두 개의 OpenVPN 서버는 --topology subnet/24 네트워크 마스크 모드입니다.

답변1

당신은 추가해야루트ccd에서 내부 openvpn 라우팅 테이블을 조작합니다.

그렇지 않으면 openvpn은 패킷을 다시 라우팅할 위치를 알 수 없습니다. openvpn 로그에는 "MULTI: 클라이언트 [IP 주소]의 소스 주소가 잘못되어 패킷이 삭제되었습니다"와 같은 줄이 있어야 합니다.

자세한 내용은 여기를 참조하세요:

https://community.openvpn.net/openvpn/wiki/RooutsLans

관련 정보