Wireguard - LAN 컴퓨터는 ping할 수 없지만(대상 호스트에 연결할 수 없음) DNS 트래픽은 LAN PiHole/Unbound에 도달합니다.

Wireguard - LAN 컴퓨터는 ping할 수 없지만(대상 호스트에 연결할 수 없음) DNS 트래픽은 LAN PiHole/Unbound에 도달합니다.

요약:

LAN 주소 확인은 일부 Wireguard 클라이언트(내 Android 휴대폰)에서는 작동하지만 다른 클라이언트(내 Linux 노트북)에서는 작동하지 않습니다.

세부 사항:

저는 홈 네트워크에 있는 두 개의 다른 Pi(기본 Raspberry Pi와 장애 조치 - 다른 포트에서 실행)에서 wireguard를 실행하고 있습니다.

PiVPN을 사용하여 두 개의 클라이언트를 설정했습니다. PiVPN의 옵션을 사용하면 휴대폰 연결이 거의 자동으로 이루어졌습니다 -qr(DNS를 PiHole로 변경하기만 하면 되었습니다). 표면적으로는 제가 .conf파일에서 몇 가지 기본적인 실수를 저지른 것이 아니라 단지 눈이 먼 것 같습니다.

각 Wireguard 서버에는 두 개의 클라이언트가 있습니다.

  1. 내 안드로이드 전화
  2. 내 Microsoft Surface 노트북/태블릿(Surface-Linux 커널 프로젝트에 대한 고개를 끄덕이는 Pop-OS 22.04를 실행 중입니다).

Pi 중 하나가 DNS용 PiHole/Unbound 콤보도 실행하고 있기 때문에 저는 모든 Android 휴대폰의 트래픽을 Wireguard 24/7을 통해 퍼널링합니다. 나 외에 다른 사람에게 기술 지원을 제공하지 않으려면 내 컴퓨터를 ISP 라우터에 설정하는 대신 로컬 DNS 서버에 연결하기만 하면 됩니다.

내 LAN:

ISP 라우터

  • Pi의 고정 IP는 예약되어 있습니다.
  • 51820 및 51821의 포트 전달

소년가족연구소

  • Wireguard(포트 51821)

구스하우스 연구실

  • 피호르
  • 구속되지 않음
  • Wireguard(포트 51820)

wg0.conf - 표면:

[Interface]
PrivateKey = (redacted)
Address = 10.140.235.3/24,fd11:5ee:bad:c0de::3/64
DNS = 192.168.1.92 # My LAN PiHole's IP

[Peer]
PublicKey = <public key>
PresharedKey = (redacted)
Endpoint = my.personal.ddns.net:51820
AllowedIPs = 0.0.0.0/0, ::0/0

해설자: 변경을 시도했지만 AllowedIPs = 0.0.0.0/0, ::0/0소용 AllowedIPs = 192.168.1.0/24이 없었습니다.

wg0.conf - 서버:

안타깝게도 제가 집에 없고 다양한 컴퓨터의 SSH 키가 내 휴대폰(터치 스크린에서 터미널 작업을 수행하는 방법이기도 함)이 아닌 내 Surface에 있기 때문에 현재로서는 이것은 자리 표시자일 뿐입니다. .

내 Surface를 전화에 테더링하고 SSH 연결을 얻기 위해 LAN으로 트래픽을 전달하려고 시도했지만 어떤 이유에서인지 연결된 트래픽이 Wireguard 인터페이스로 전달되지 않는 것 같습니다.

질문

내 휴대폰은 LAN에 있는 컴퓨터의 IP를 확인할 수 있지만 내 Surface 태블릿은 확인할 수 없습니다. 하지만tcpdump내 Surface는 LAN IP를 통해 설정한 와이어가드를 통해 DNS 트래픽을 파이홀로 전달할 수 있습니다 (PiHole 관리 콘솔 및 dnsleaktest.org에서 확인). wg0.confDNS 트래픽이 내 LAN의 PiHole을 통과하지만 장치에 ping을 보낼 수 없다는 사실은 매우 혼란스럽습니다.

다음과 같이 LAN에 있는 모든 컴퓨터에 표면적으로 ping을 실행해 보세요.

stenolepis@pop-os:~$ ping 192.168.1.92
PING 192.168.1.92 (192.168.1.92) 56(84) bytes of data.
From 192.168.1.89 icmp_seq=1 Destination Host Unreachable
From 192.168.1.89 icmp_seq=2 Destination Host Unreachable
From 192.168.1.89 icmp_seq=3 Destination Host Unreachable

브라우저를 통해 LAN에서 실행되는 서비스에 연결하려고 하면 다음과 같은 메시지가 나타납니다. browser_unable_to_connect

이것은 다음과 매우 유사해 보입니다.Ubuntu Wireguard 문제 해결 문서에 언급된 "대상 주소 필요"나는 단지 이해하지 못한다는 것뿐이다 ping: sendmsg: Destination address required.

내가 실행하면 라우팅 문제라고 생각합니다.

stenolepis@pop-os:~$ sudo ip route get 192.168.1.92
192.168.1.92 dev wlp1s0 src 192.168.1.89 uid 0 
    cache

Wireguard 인터페이스로 라우팅되지 않는 것 같은데 이유를 모르겠습니다.

분명히 내가 사용 중인 네트워크와 내 홈 LAN(둘 다 192.168.1.x 사용) 사이에 서브넷 충돌이 있지만, 내 모든 트래픽을 수신하도록 wireguard가 설정된 경우 이것이 왜 문제가 될지 모르겠습니다. 물론 내 휴대폰에도 영향을 미치지 않습니다.

아니면 내 네트워크 디버깅 기술이 제한되어 있기 때문에 농담하는 것입니다.

추가 문제 해결:

ip awg0의 결과:

stenolepis@pop-os:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:a2:c4:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 28:16:a8:51:52:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.70/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0
       valid_lft 84617sec preferred_lft 84617sec
    inet6 2001:569:70d6:d700:568c:4fcf:4983:1bd5/64 scope global temporary dynamic 
       valid_lft 14682sec preferred_lft 14382sec
    inet6 2001:569:70d6:d700:ecfe:8f0d:350f:414e/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 14682sec preferred_lft 14382sec
    inet6 fe80::6bd3:60c3:353b:c5d0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
14: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.140.235.3/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fd11:5ee:bad:c0de::3/64 scope global 
       valid_lft forever preferred_lft forever

답변1

핵심 질문은 다음과 같습니다.

현재 사용 중인 네트워크와 홈 LAN(둘 다 192.168.1.x 사용) 사이에 서브넷 충돌이 있습니다.

Android와 같은 일부 플랫폼에서 WireGuard 클라이언트는 모든 호스트의 경로를 자동으로 재정의하여 모든 것(자체 암호화된 패킷 제외)을 WireGuard 인터페이스로 라우팅합니다 및/또는AllowedIPs(예:0.0.0.0/0::/0

하지만 Linux에서는 WireGuard 클라이언트 스크립트가빠른 작업 그룹AllowedIPsEverything으로 설정하면 호스트의 기본 경로를 제외한 모든 경로를 재정의하지 않도록 최선을 다합니다.

ip route show table mainWireGuard 인터페이스가 켜져 있는 가정용 LAN이 아닌 Pop!_OS 태블릿에서 실행 중인 경우 다음과 같은 내용이 표시됩니다.

$ ip route show table main
default via 192.168.1.1 dev wlp1s0 proto dhcp src 192.168.1.70 metric 100
10.140.235.3/24 dev wg0 scope link
169.254.0.0/16 dev wlp1s0 scope link metric 1000
192.168.1.0/24 dev wlp1s0 proto kernel scope link src 192.168.1.70 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

기본 라우팅 테이블에 나열된 모든 경로(기본 경로 제외)는 wg-quick 스크립트에 의해 설정된 기본 경로보다 우선적으로 사용됩니다. 따라서 192.168.1.0/24네트워크의 호스트(예: Pi) 에 연결하려고 하면 연결은 WireGuard 인터페이스가 아닌 인터페이스에서 현재 사용 중인 LAN의 게이트웨이로 192.168.1.92라우팅됩니다 .wlp1s0

wg-quick 스크립트는 사용자 정의 경로 테이블에 새로운 기본 경로를 설정합니다 51820.

$ ip route show table 51820
default dev wg0 scope link

wg-quick 스크립트는 이 사용자 정의 라우팅 테이블이 사용되는 시기를 정의하기 위해 몇 가지 정책 라우팅 규칙을 설정합니다 51820. 이를 사용하여 기본 테이블의 기본 라우팅을 재정의합니다.

$ ip rule list
0:  from all lookup local
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main
32767:  from all lookup default

기본 경로뿐만 아니라 기본 라우팅 테이블의 모든 경로를 포괄하려면 wg0인터페이스가 표시될 때 다른 정책 라우팅 규칙을 추가해야 합니다.

$ sudo ip rule add not fwmark 51820 table 51820 priority 123

51820이 규칙은 패킷 태그가 51820( 0xca6c16진수) 로 설정되지 않은 한 모든 것에 대해 사용자 정의 테이블을 사용하도록 시스템에 지시합니다 . WireGuard는 전송하는 모든 암호화된 패킷에 이 패킷 표시를 설정합니다. 이러한 패킷은 LAN 게이트웨이로 전송되어 인터넷으로 전달되기 위해 기본 라우팅 테이블을 사용해야 합니다.

wg0다음 PreUp/PostDown 스크립트를 파일 섹션에 추가하면 [Interface]인터페이스를 시작하고 닫을 때 wg-quick 스크립트가 이 규칙을 자동으로 추가하고 제거하도록 할 수 있습니다.wg0.conf

PreUp = ip rule add not fwmark 51820 table 51820 priority 123
PostDown = ip rule del not fwmark 51820 table 51820 priority 123

관련 정보