WireGuard: 피어 중 하나가 다른 피어에 핑을 보낼 수 없지만 핸드셰이크는 작동하고 다른 피어는 서로 핑할 수 있습니다.

WireGuard: 피어 중 하나가 다른 피어에 핑을 보낼 수 없지만 핸드셰이크는 작동하고 다른 피어는 서로 핑할 수 있습니다.

최근에 wg-easy를 사용하여 서버에 WireGuard를 설정했고(따라서 수동으로 입력하지 않고 구성 파일이 생성됨) Linux 시스템을 포함한 여러 피어에 성공적으로 연결했습니다. 마지막으로 설정할 것은 EndeavourOS가 설치된 내 노트북입니다. 왜 이 장치가 다른 피어를 핑할 수 없는지(또는 해당 피어에서 호스팅되는 http 서비스에 액세스할 수 없는지) 이해가 되지 않습니다. PC에 연결하려고 한다고 가정해 보겠습니다. 가장 중요한 네 가지 부분(내 생각에는):

  1. 핑이 실제로 PC에 도달하고 PC가 응답하지만(tcpdump를 사용하여 확인) 노트북은 응답을 받지 못합니다. 나는 전문가는 아니지만 이것이 wg 구성( ip route get PC-IP올바른 인터페이스 반환)에 문제가 되지 않는다는 것을 의미합니다.
  2. Firewalld를 비활성화했지만 여전히 작동하지 않습니다(이 작업을 수행하기 전에 로그를 살펴보았지만 아무 것도 차단하지 않는 것 같습니다). iptables에는 규칙이 없습니다.
  3. 서버(wg-easy가 설정된 서버)와의 핸드셰이크가 작동합니다.
  4. WireGuard가 아닌 IP를 통해 PC에 ping을 보낼 수 있습니다.

또한 wg-quick을 사용하여 인터페이스를 다시 시작하고, 다시 시작하고, 다른 네트워크로 전환하는 등의 다른 상식적인 솔루션도 시도했지만 아무 도움이 되지 않았습니다. 여기서 무엇이 잘못될 수 있는지 전혀 모르므로 도움을 주시면 대단히 감사하겠습니다.

편집: 관련 피어의 구성은 다음과 같습니다.

wg-easy 서버 구성:

# Server
[Interface]
PrivateKey = (a key)
Address = 10.8.0.1/24
ListenPort = 51820
PreUp = 
PostUp =  iptables -t nat -A POSTROUTING -s 10.155.129.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
PreDown = 
PostDown = 


# Client: PC
[Peer]
PublicKey = (a key)
PresharedKey = (a key)
AllowedIPs = 10.155.129.2/32

# Client: laptop
[Peer]
PublicKey = (a key)
PresharedKey = (a key)
AllowedIPs = 10.155.129.6/32

컴퓨터 구성:

[Interface]
PrivateKey = (a key)
Address = 10.155.129.2/24
DNS = 1.1.1.1


[Peer]
PublicKey = (a key)
PresharedKey = (a key)
AllowedIPs = 10.155.129.0/24
PersistentKeepalive = 25
Endpoint = (server's public IP):51820

마지막으로 노트북 구성은 다음과 같습니다.

[Interface]
PrivateKey = (a key)
Address = 10.155.129.6/24
DNS = 1.1.1.1


[Peer]
PublicKey = (a key)
PresharedKey = (a key)
AllowedIPs = 10.155.129.0/24
PersistentKeepalive = 25
Endpoint = (server's public IP):51820

감사해요!

답변1

며칠 후 내 개입 없이 연결이 작동하기 시작했기 때문에 이 문제를 어떻게 해결해야 할지 잘 모르겠지만, 문제가 무엇인지 알아내기 위해 다른 사람들이 할 수 있는 일에 대한 몇 가지 제안 없이 이 문제를 방치하지 않기 위해 다음과 같이 설명합니다. 몇 가지 단계:

  1. Ping이 피어에 도달하는지 확인하십시오. ping하려는 피어에서 다음 명령을 실행하십시오. (여기서 WireGuard 인터페이스의 이름은 sudo tcpdump -tttnei wg0 icmp무엇입니까 ?) wg0그렇다면 이 동일한 명령은 피어가 예상한 IP로 응답하는지 여부를 알려줍니다. 이는 피어를 핑하기 위한 WireGuard conf 파일의 주소 필드에 있는 IP와 동일해야 합니다(제 경우에는 10.155.129.6).
  2. VPN 서버를 통해 연결되었는지 확인하세요. docker에서 wg-easy를 실행하는 경우에도 tcpdump호스트에서 직접 실행할 수 있습니다. sudo tcpdump -ttttni any 'udp port 51820'즉, -i any모든 인터페이스에서 수신 대기한다는 의미입니다(나처럼 패킷이 어떤 인터페이스를 통과할지 확신할 수 없음). 당신이하고있는 일 docker 에서 wg-easy에 51820바인딩된 포트입니다 . 51820이미 동반자가 많다면 아마도 그곳에서 꽤 많은 소음을 보게 될 것입니다. 가능하다면 디버깅하는 동안 다른 피어의 VPN 연결을 끊을 수 있습니다.
  3. 배포판에 방화벽이 무엇인지 다시 확인하세요. EndeavourOS의 경우 방화벽입니다. 패킷을 차단하지 않는지 확인하세요.

행운을 빌어요!

답변2

Wireguard 서버에서 다음 규칙을 추가합니다.

sudo iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT

관련 정보