IP 주소가 98.XX.XX.XX인 Wireguard가 있는 외부 서버(호스트)와 Wireguard가 192.168.0.2인 내부 서버(클라이언트)가 있습니다.
클라이언트 측에 웹 서버(nginx, phpfpm)를 설치합니다. 호스트에서는 모든 포트가 클라이언트로 전달됩니다. 192.168.0.2에서 98.XX.XX.XX IM 응답을 받으면 웹 서버 페이지입니다. 모두 괜찮지만 클라이언트 로그 파일에서 모든 연결의 IP 주소는 192.168.0.1(게이트웨이 wiregusrd 호스트 98.XX.XX.XX)입니다.
나는 클라이언트 규칙을 사용하여 이 작업을 수행하려고 합니다.
Table = 1
PostUp = ip rule add pref 500 from 192.168.0.2 lookup 1
PostDown = ip rule del pref 500
서버 측 규칙
Address = 195.168.0.1/24
SaveConfig = true
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = iptables -t nat -A PREROUTING -d 98.XX.XX.XX -p tcp -m multiport --dports 80,443,25,53,21,20,110,113,465,587,993,995,4747,3306,4200 -j DNAT --to-destination 195.168.0.2
PostUp = iptables -t nat -A PREROUTING -d 98.XX.XX.XX -p tcp -m multiport --dports 5432,43,143,123,8002 -j DNAT --to-destination 195.168.0.2
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -t nat -D PREROUTING -d 98.XX.XX.XX -p tcp -m multiport --dports 80,443,25,53,21,20,110,113,465,587,993,995,4747,3306,4200 -j DNAT --to-destination 195.168.0.2
PostDown = iptables -t nat -D PREROUTING -d 98.XX.XX.XX -p tcp -m multiport --dports 5432,43,143,123,8002 -j DNAT --to-destination 195.168.0.2
ListenPort = 51823
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 195.168.0.0/24
그러나 클라이언트 192.168.0.2에서 ping을 보내거나 패킷을 보내면 외부 IP가 있고 공급자 IP 주소는 169.XX.XX.XX입니다. IP 주소 98.XX.XX.XX(호스트) Wireguard에서 패킷을 보내야 합니다.
나에게 필요한 간단한 솔루션
클라이언트 IP 24.18.22.12 -> Wireguard 호스트(98.XX.XX.XX) -> 내부 웹 서버(192.168.0.2)(내부 웹 서버는 클라이언트 IP 원본 24.18.22.12를 확인하며 Wireguard 게이트웨이 없음)
내부 웹 서버(192.168.0.2)의 데이터를 Google이나 일부 웹사이트에 게시하면 Wireguard 호스트(98.XX.XX.XX)의 IP 주소를 얻지만 공급자의 IP 주소 169.XX.XX를 얻지 못합니다. .더블 엑스
내부 웹 서버(192.168.0.2) -> google.com(Google에서는 Wireguard 호스트(98.XX.XX.XX)를 확인함)
필요한 것은 간단합니다. nat(wireguard) 뒤의 웹 서버에서 모든 http GET ip는 24.18.22.12(실제 클라이언트 IP) 192.168.0.2 대신 IP 주소 wireguard getaway(192.168.0.2)를 얻습니다. - [08/May/2022:14:15:14 +0300] "GET /view.php?show=body HTTP/1.0" 200 2803 "https://site.domain/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
모든 요청, Get, 출판 등 IP 192.168.0.2가 있습니다.
답변1
클라이언트 IP 24.18.22.12 -> Wireguard 호스트(98.XX.XX.XX) -> 내부 웹 서버(192.168.0.2)(내부 웹 서버는 클라이언트 IP 원본 24.18.22.12를 확인하며 Wireguard 게이트웨이 없음)
글쎄, 당신은 NAT를하고 있습니다. 문자 그대로 네트워크 주소는 다음과 같습니다.번역된. 그러므로 당신이 원하는 것은 불가능합니다.
따라서 NAT를 수행하는 동시에 NAT를 수행하지 않을 수는 없습니다.
Wireguard는 레이어 3 터널입니다. 즉, 실제로 IP(v4 또는 v6) 패킷만 전달할 수 있습니다. 클라이언트가 호스트의 IP 주소에 대한 패킷을 처리하도록 하려면 호스트에서 해당 작업을 수행하거나 NAT( 필요하지 않습니다).클라이언트에 대해 별도의 공용 IP 주소를 노출할 수 없다면 다른 접근 방식은 보이지 않습니다.
따라서 호스트(98.xxx)에서 HTTP 처리를 수행해야 하며, 설정한 모든 NAT 규칙을 제거하고 nginx를 다음으로 설정해야 합니다.역방향 프록시, TLS 연결을 처리하고 연결 시간을 대폭 단축할 수 있으며, 내부(예: Wireguard) 클라이언트 IP 주소를 사용하는 Wireguard 터널을 통해 실제 웹 서버와 통신할 수도 있습니다.
내부 웹 서버(192.168.0.2) -> google.com(Google에서는 Wireguard 호스트(98.XX.XX.XX)를 확인함)
이는 가능합니다. 원하는 경우 호스트가 클라이언트의 나가는 연결에 대한 NAT "VPN 종료" 역할을 할 수도 있습니다. 실제로 단순화, 보다 깔끔한 구성 및 더 높은 보안을 위해 별도의 와이어가드 터널을 설정하여 시스템이 다음과 같이 설정되도록 하겠습니다.
답변2
안녕하세요, 이것은 실제로 매우 간단합니다!
제 생각에는 이것이 프록시를 사용하여 헤더를 추가하는 것보다 "최상의" 접근 방식입니다. 이 정책 접근 방식은 웹 서버뿐만 아니라 모든 것에 적용됩니다.
Fail2ban 및 기타 IP 관련 화이트리스트와 함께 사용하기 위해 올바른 원본 IP로 메일 서버를 호스팅하는 데 사용합니다. (내 ISP가 포트 25를 차단하기 때문에)
--- 가상 네트워크 레이아웃--- | 위치 | 라인배커 | ---| 46.123.123.0 | |[RGO] 무작위 사람들 온라인 64.123.123.0 |
여기서 목표는 VPS IP를 사용할 때 홈 서버에서 호스팅되는 RGO 액세스 웹 페이지를 가지되, 당사 서비스에서 사용할 수 있도록 원본 소스 IP(RGO)를 보고하는 것입니다.
- - 발자국 - -
먼저 트래픽을 홈 서버(VPS에서)로 라우팅하기 위해 DNAT 규칙을 추가해야 합니다.
다음과 같은 것이 간단한 설정에 적합합니다.
iptables -t nat -I PREROUTING 1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.200:80
기본적으로 우리는 iptables에 포트 80을 통해 수신된 패킷을 캡처하고 기본 라우팅 프로세스를 자체적으로 재정의하도록 요청합니다.
이제 패킷은 한 방향으로 흐르지만 응답은 올바르게 라우팅되지 않으므로 마스터가 데이터를 전송하려고 할 때 패킷이 다시 흐르도록 SNAT를 수행하는 대신 정책 라우팅을 사용하여 패킷을 올바르게 라우팅합니다.
기본적으로 패킷을 표시하고 Wireguard 터널을 다시 사용하기 위해 기본 경로를 재정의합니다.
따라서 이를 달성하려면 Wireguard 클라이언트(홈서버) 구성 파일에 다음을 추가해야 합니다.
[Interface]
PrivateKey = <Wireguard Private Key HERE>
Address = 10.0.0.200
Table = 123
PreUp = ip rule add from 10.0.0.200 table 123 priority 456
PostDown = ip rule del from 10.0.0.200 table 123 priority 456
[Peer]
PublicKey = <Wireguard Peer PubKey HERE>
Endpoint = 46.123.123.0:51822
AllowedIPs = 0.0.0.0/0 # This is required for this method to work
PersistentKeepalive = 25
- 결과 -
이제 RGO IP가 DNAT 규칙을 사용하여 VPS IP에서 무언가를 요청하면 홈 서버의 서비스에 RGO IP가 표시됩니다.
좋은 하루 보내세요.
비록 1년 늦더라도 이것이 도움이 되기를 바랍니다 :D
레인 벤 아마르