Wireguard 터널을 통한 트래픽 전달을 위한 Linux 라우터

Wireguard 터널을 통한 트래픽 전달을 위한 Linux 라우터

ArchLinux 서버를 실행하는 두 곳이 있습니다.

  1. 원격 위치는 로컬 ISP의 라우터에 의해 NAT됩니다. ISP에서는 공용 IP 주소를 제공하지 않으므로 라우터의 IP 주소는 10.0/16이고 ISP로부터 공용 IP 주소를 얻을 수 없습니다.
  2. 기본 위치에서는 ArchLinux 서버가 다시 실행 중이지만 ISP 라우터 뒤에 NAT가 연결되어 있습니다. 하지만 이 경우 ISP는 공개 IPv4 주소를 제공합니다.

저는 두 대의 서버에서 wireguard를 실행하고 있습니다. 홈 위치의 공용 IP 주소와 라우터의 포트 전달 기능을 사용하여 원격 ArchLinux 서버는 홈 위치에 대한 Wireguard P2P 연결을 설정할 수 있습니다.

내 집 위치에서 원격 위치로 SSH 명령을 사용하여 SOCKS5 프록시를 설정했습니다. 이 SOCKS5 프록시를 사용하면 홈 네트워크의 브라우저가 트래픽을 라우팅하여 원격 위치에서 웹 사이트 및 서비스에 액세스할 수 있습니다. 지역 잠금 해제 서비스 사용 사례로 생각하세요.

이제 저는 한 단계 더 나아가 다른 장치가 원격 위치를 통해 트래픽을 전달할 수 있도록 홈 ArchLinux 서버를 Linux 라우터로 만들고 싶습니다.

홈 서버에는 eth 포트가 1개만 있습니다. 무선 카드가 있지만 연결되어 있지 않습니다. 라우팅을 위한 가상 인터페이스를 생성할 수는 있지만 정확히 방법은 모르지만 문서를 읽고 수행하는 것이 가능할 수도 있습니다. 가장 큰 질문은 홈 서버에서 트래픽을 수신하고 설정된 Wireguard 피어 터널을 통해 원격 서버로 전달할 수 있도록 라우터를 만드는 방법입니다. SOCKS5 프록시를 지원하는 브라우저뿐만 아니라 다른 장치에서도 원격 서버에 액세스할 수 있기를 바랍니다. Wi-Fi를 설정하는 데 사용하는 오래된 라우터가 있습니다. 이 라우터가 홈 서버->wireguard 터널->원격 서버를 통해 트래픽을 라우팅하기를 원합니다.

SOCKS5 프록시를 통해 원격으로 웹사이트에 액세스

답변1

홈 WireGuard 서버와 원격 WireGuard 서버 사이에 WireGuard 연결을 설정하여 홈 WireGuard 서버의 모든 인터넷 트래픽을 이를 통해 전송하는 경우 원격 서버의 WireGuard 구성은 다음과 같습니다.

[Interface]
PrivateKey = abc123...
Address = 192.168.95.4/24

# packet forwarding
PreUp = sysctl -w net.ipv4.conf.all.forwarding=1
# packet masquerading
PreUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = def456...
AllowedIPs = 192.168.95.1/32
Endpoint = 203.0.113.2:51820
PersistentKeepalive = 25

홈 WireGuard 서버의 WireGuard 구성은 다음과 같습니다.

[Interface]
PrivateKey = ghi890...
Address = 192.168.95.1/24
ListenPort = 51820

[Peer]
PublicKey = jkl123...
AllowedIPs = 0.0.0.0/0

홈 WireGuard 서버가 이 WireGuard 연결을 통해 LAN에서 트래픽을 전달할 수 있도록 하려면:

1. 홈 WireGuard 서버에서 패킷 전달을 활성화합니다.

IPv4 패킷 전달을 활성화하려면 홈 WireGuard 서버에서 다음 명령을 실행하십시오.

sudo sysctl -w net.ipv4.conf.all.forwarding=1
2. 홈 WireGuard 서버에서 전달된 트래픽을 위장합니다.

홈 WireGuard 서버에서 iptables를 사용 중이고 해당 WireGuard 인터페이스가 이면 wg0다음 명령을 실행하여 WireGuard 인터페이스로 전달되는 패킷을 스푸핑합니다.

sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
3. 홈 WireGuard 서버의 방화벽을 조정하세요

홈 WireGuard 서버에서 iptables를 사용 중이고 LAN 인터페이스가 eth0WireGuard 인터페이스가 인 경우 wg0이 명령을 실행하여 LAN에서 WireGuard 인터페이스로 연결을 전달할 수 있습니다(기존 연결이 다른 수단을 통해 다시 허용되도록 허용).

sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT

트래픽을 차단하기 위해 WireGuard 서버에 방화벽을 설정하지 않은 경우에는 이 작업이 필요하지 않습니다. 다음 명령을 사용하여 기존 iptables 규칙 세트를 확인하십시오.

sudo iptables-save

또는 nftables 명령:

sudo nft list ruleset
4. 홈 LAN에서 인터넷 트래픽 라우팅

WireGuard 서버의 LAN IP를 사용하여 홈 라우터 또는 홈 LAN의 개별 장치를 조정하여 인터넷 트래픽을 홈 WireGuard 서버로 라우팅합니다.

eth0Linux 장치에서 장치의 LAN 인터페이스가 이고 홈 WireGuard 서버의 LAN 주소가 이면 192.168.1.123이를 수행하는 명령은 다음과 같습니다.

sudo ip route change default via 192.168.1.123 dev eth0

이 명령과 위의 모든 명령은 시스템 구성을 일시적으로만 변경합니다. 시스템을 재부팅해도 지속되지 않습니다(장치가 DHCP를 사용하는 경우 해당 DHCP 클라이언트는 DHCP 임대 라우팅을 갱신할 때 기본값을 변경할 수 있음). 영구적으로 유지하려면 시스템 시작 후 실행되는 스크립트에 추가하세요.

관련 정보