
배경:
로컬(개인) 네트워크에 Wireguard VPN 서버를 구성했습니다. [사설 네트워크 가정: 192.168.1.0/24] Wireguard 클라이언트는 동일한 IP 네트워크 192.168.1.X를 가지고 있습니다.
내 네트워크에 고정 로컬 IP 주소를 사용하는 일부 비Wireguard 호환 장치(IP 카메라, DVR)가 있습니다.
쿼리:
Wireguard 클라이언트로 Wireguard 서버(로컬 네트워크 외부에서)에 연결할 때 로컬 고정 IP 주소를 사용하여 Wireguard와 호환되지 않는 장치에 액세스하고 싶습니다. IP 충돌이 발생하지 않도록 했습니다.
답변1
WireGuard를 통해 다양한 외부 호스트를 LAN에 연결하려는 경우 수행해야 할 세 가지 주요 작업은 다음과 같습니다.
AllowedIPs
각 장치의 WireGuard 구성 설정 에 LAN의 IP 블록(또는 최소한 연결할 각 LAN 측 호스트의 IP 주소)을 포함합니다.외부주인- LAN 측 WireGuard 호스트에서 패킷 전달 설정(예
sysctl -w net.ipv4.ip_forward=1
: ) - LAN 측 WireGuard 호스트에서 패킷 매스커레이딩(SNAT라고도 함) 설정(일반적으로
iptables
규칙을 통해 수행됨)
완전한 예는 다음과 같습니다.
https://www.procustodibus.com/blog/2020/11/wireguard-point-to-site-config/
이 예에서 LAN의 서브넷은 이므로 외부 호스트(예에서는 끝점 A)에 대한 WireGuard 구성의 설정 192.168.200.0/24
입니다 .AllowedIPs
AllowedIPs = 192.168.200.0/24
이 예에서 패킷 전달 및 가장은 LAN 측 WireGuard 호스트(예에서는 호스트 β)의 WireGuard 구성에 다음을 추가하여 수행됩니다.
# IP forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# IP masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
LAN 측 WireGuard 호스트의 WireGuard 인터페이스가 wg0
작동되면 외부 호스트는 LAN 주소를 통해 LAN의 모든 호스트에 연결할 수 있습니다. 예에서 외부 호스트(엔드포인트 A)는 LAN 호스트(엔드포인트 B)에 연결할 수 있습니다. ) Endpoint B의 로컬 주소를 통해 192.168.200.22
.
답변2
VPN 서버(VPN 10.5.0.1/24) 역할을 하는 장치와 LAN 192.168.50.1/24가 있으면 외부 클라이언트(10.5.0.4)를 만들어 원래 LAN(예: 192.168.50.185)의 장치에 액세스할 수 있습니다. ).
나는 다음을 통해 이것을 달성합니다:
IP4 전달 활성화
/etc/sysctl.conf
/etc/wireguard/wg0.conf
(필드 ) 행 에 추가[interface]
:PreUp = sysctl -w net.ipv4.ip_forward=1; iptables -I INPUT 1 -i wg0 -j ACCEPT;iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT; iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT
변경 슬롯 적용
sudo systemctl restart wg-quick@wg0
트래픽을 원하는 호스트로 전달하도록 클라이언트를 구성합니다. 즉, 클라이언트의 내 파일 아래에 있습니다
[Peer]
.AllowedIPs = 10.5.0.1/24;192.168.50.185/32
도움이 되었기를 바랍니다.