私は数週間前に旅行に行きましたが、ワイヤガードの接続が突然動作を停止するまで、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
設定内)。ただし、接続は自動的に失敗し、接続を介して送信するすべての操作はタイムアウトします。
これが問題であれば、問題は深刻なものです。実現することが重要です2 つのピア間のアドレス/許可 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