저는 몇 주 전에 여행을 가던 중 와이어가드 연결이 갑자기 작동을 멈출 때까지 1년 넘게 똑같은 구성으로 작업하고 있었습니다. 집에 돌아와서 문제를 해결하려고 노력했지만 전혀 알 수 없었습니다.
홈 서버는 Unifi USG 라우터 뒤의 192.168.1.2에서 실행됩니다. 51820/udp 포트가 USG에서 서버로 올바르게 전달되었습니다. UFW 방화벽은 서버에서 비활성화되어 있지만 동일한 서버에서 실행되는 다양한 도커 컨테이너가 있기 때문에 많은 IP 테이블 규칙이 활성화되어 있습니다. 불행히도 IP 테이블 규칙을 파악할 수 없습니다.
wg0.conf:
[Interface]
# wg0
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = [redacted]
# PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
# PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp4s0 -j MASQUERADE
# These rules should NOT be necessary according to Arch Wiki and other places I have read since the wireguard "server" sits behind NAT home router. Regardless, it doesn't work with or without these iptables rules uncommented.
[Peer]
# iphone
PublicKey = [redacted]
AllowedIPs = 10.0.0.2/32
iPhone.conf:
[Interface]
Address = 10.0.0.2/32
PrivateKey = [redacted]
DNS = 192.168.1.1 #address of my USG router serving dns. Have also tried public DNS like 1.1.1.1 with no luck
[Peer]
PublicKey = [redacted]
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = vpn.mydomain.dev:51820 # DNS records set correctly via cloudflare (no proxying) and I know this works because I can get a handshake with the server, just no internet or LAN access.
PersistentKeepalive = 25
IPv4 전달 활성화:
[email protected]: ~ ➜ cat /proc/sys/net/ipv4/ip_forward
1
192.168.1.2 서버에서 ipv6을 비활성화합니다.
[email protected]: ~ ➜ sudo sysctl -p /etc/sysctl.d/ipv6.conf
net.ipv6.conf.enp4s0.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
문제를 해결할 수 있는 다른 곳을 알려주세요. 미리 감사드립니다!
편집 - 원래 게시물 이후 추가 문제 해결 단계를 시도했지만 성공하지 못했습니다. -
모든 도커 컨테이너를 완전히 중지한 다음 도커 서비스 자체를 중지한 다음 전달된 모든 패킷이 허용되는지 확인하면서 모든 iptables 규칙을 새로 고쳤습니다.
#!/bin/sh
ipt="/sbin/iptables"
$ipt -P INPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -P OUTPUT ACCEPT
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X
$ipt -t mangle -F
$ipt -t mangle -X
$ipt -t raw -F
$ipt -t raw -X
새로 고침 후 IPv4 iptables를 확인합니다.
sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 3111 packets, 355K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2087 packets, 156K bytes) pkts bytes target prot opt in out source destination
그런 다음 Wireguard 터널을 시도했지만 여전히 동일한 상황입니다. 핸드셰이크는 있지만 인터넷이나 LAN 연결은 없습니다.
답변1
핸드셰이크가 작동하고 바이트가 전송됩니다( PersistentKeepalive = 25
구성에서). 그러나 연결은 자동으로 실패하고 연결을 통해 전송하려는 모든 작업은 시간 초과됩니다.
이것이 문제라면 문제가 심각한 것입니다깨닫는 것이 중요하다두 피어 간의 주소/허용 IP 또는 PrivateKey/PublicKey 구성에 불일치가 있는 경우 핸드셰이크가 계속 작동하더라도 연결 시간이 초과됩니다(에 따라 wg show
).
다음을 통해 문제를 해결하세요.
- A의 Interface-섹션 항목이
Address
B의 Peer-섹션 항목 범위 내에 있는지 확인하세요.AllowedIPs
- B의 해당 부분에 있는 항목
wg pubkey <<<"<PrivateKey of A's Interface-section"
과 일치하는지 확인하세요.PublicKey
그 반대의 경우도 마찬가지입니다(A와 B 교체).
그런 다음 다음 명령을 사용하여 두 피어 모두에서 인터페이스를 재설정해야 합니다(여기서 wg0은 인터페이스 이름임).
wg-quick down wg0
wg-quick up wg0
변경하는 경우 이것만으로는 wg syncconf wg0 <(wg-quick strip wg0)
충분하지 않습니다 Address
.
상황에 따라 간단히 또는 Address = 10.0.0.1/24
으로 변경할 수 있습니다 . 항목에서 IP 범위를 설정해야 한다고 생각하지 않습니다 . 이는 여러 IP 주소를 허용하기 위해 AllowedIP에서만 작동합니다.Address = 10.0.0.1/32
Address = 10.0.0.1
Address