دستدادن WireGuard کار میکند، اما زیرشبکه دفتر پاسخ نمیدهد
WireGuard فعال است و به سرور پینگ میزند، اما هیچ چیز در LAN آن پاسخ نمیدهد. پیشوند کلاینت، ارسال سرور و مسیر پاسخ را بررسی کنید.
دستدادن کامل میشود، wg show انتقال اخیر را گزارش میدهد، و نشانی تونل سرور به پینگ پاسخ میدهد. اما یک میزبان در LAN سرور پاسخ نمیدهد. سه شرط باید همزمان برقرار باشند: کلاینت باید پیشوند LAN را به تونل مسیریابی کند، سرور باید بستهها را ارسال کند، و پاسخ به مسیری برای بازگشت نیاز دارد. وقتی یکی از سه شرط نباشد، نشانه یکسان است.
AllowedIPs هم فهرست دسترسی است و هم جدول مسیریابی
در کلاینت، فهرست AllowedIPs هم تعیین میکند چه چیزی میتواند به آن همتا فرستاده شود و هم اینکه WireGuard کدام مسیرها را نصب میکند. ورودی همتایی که فقط نشانی تونل سرور را فهرست میکند، یک مسیر میزبان نصب میکند، بنابراین مقصدهای LAN هرگز وارد تونل نمیشوند. افزودن پیشوند LAN نخستین چیزی است که باید بررسی شود، و همان تغییری است که پس از کپی یک پیکربندی بیشتر از همه جا میافتد. همتایی که به یک مسیر پیشفرض گسترده شده طراحی دیگری است و ترافیک اینترنت کلاینت را نیز جابهجا میکند.
مسیر میزبان و پیشوند LAN را بهصورت ورودیهای جداگانه نگه دارید. اگر دفتر دو زیرشبکه دارد، هر دو به فهرست تعلق دارند، و پیشوند دوم غایب خرابیای میسازد که گزینشی به نظر میرسد نه کلی.
[Peer] PublicKey = <server public key> Endpoint = vpn.example.net:51820 AllowedIPs = 10.66.0.1/32, 192.168.50.0/24
ارسال و ترجمه به سرور تعلق دارند
سرور به ارسال IP فعال، قاعدهای برای ارسال که ترافیک ورودی از تونل را میپذیرد، و قاعدهای برای ترجمه به سمت رابط LAN خود نیاز دارد. ترجمه همان چیزی است که طراحی را بدون دست زدن به هر میزبان در شبکه دفتر کارا میکند. آنگاه پاسخها به سرور بازمیگردند نه به نشانیای که LAN هرگز از آن نشنیده است. بدون آن، هر میزبان به مسیری برای زیرشبکه تونل و قاعدهای در دیوار آتش نیاز دارد که آن را مجاز کند، و این در شبکهای که کس دیگری مدیریت میکند بهندرت پذیرفتنی است.
sysctl -w net.ipv4.ip_forward=1 iptables -A FORWARD -i wg0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
قاعدههایی که دستی افزوده شوند در راهاندازی دوباره از میان میروند، پس آنها را با فرمانهای قلاب در پیکربندی سرور به رابط گره بزنید. مجموعهقاعدهای که از رابط خود بیشتر میماند، همان راهی است که یک ماشین سرانجام ترافیک تونلی را که دیگر وجود ندارد ترجمه میکند.
وقتی LAN جابهجا شد و قاعده نشد
تعویض روتری که زیرشبکه دفتر را دوباره شمارهگذاری میکند نسخه کلاسیک این خرابی است. تونل برپا میماند، دستدادن تازه میماند، و هیچ چیز پشت سرور پاسخ نمیدهد، چون قاعده ترجمه هنوز نشانی قدیمی را نام میبرد. اسکریپتهای نصب اغلب نشانی LAN سرور را در قاعده POSTROUTING میپزند، و پس از شمارهگذاری دوباره آن نشانی روی هیچ رابطی وجود ندارد. سپس بستهها به مقصدی بازنویسی میشوند که نمیتواند پاسخ دهد.
iptables -t nat -n -L POSTROUTING ip -br addr show
دو خروجی را مقایسه کنید. هدف ترجمهای که در فهرست رابطها نمیآید همان اشکال است، و رفع آن تغییری یکخطی است وقتی آن را دیده باشید. قاعده ممکن است در واحدی تولیدشده باشد نه در پیکربندی WireGuard، پس پس از ویرایش آن واحد را دوباره بارگذاری کنید و تأیید کنید که راهاندازی بعدی تغییر شما را بازنویسی نمیکند.
دو سایت پشت NAT به جایی برای دیدار نیاز دارند
وقتی هیچکدام از دو طرف اتصالهای ورودی را نمیپذیرد، پاسخ عملی یک میزبان کوچک با نشانی عمومی و دو رابط WireGuard است. هر سایت به بیرون متصل میشود، میزبان میانی LAN هر همتا را در AllowedIPs، که فهرست خودش است، میآورد، و ارسال بستهها را میان دو تونل میبرد. هیچ چیز در دیوار آتش هیچیک از دو سایت لازم نیست تغییر کند، و به همین دلیل این طراحی آسان گسترش مییابد.
مسیریابی میان سایتها نشانیهای مبدأ اصلی را نگه میدارد و بنابراین ثبت هر میزبان را معنادار نگه میدارد. ترجمه در میزبان میانی وقتی دو LAN همپوشانی دارند سادهتر است، اما به بهای از دست رفتن هویت مبدأ در گزارشها. پیش از انتخاب تصمیم بگیرید کدام ویژگی اهمیت دارد.
لایهها را با چهار بررسی جدا کنید
بهجای تغییر سه چیز و امید داشتن، برای هر لایه یک بررسی انجام دهید. نخستین سن دستدادن و شمارندههای هر همتا را نشان میدهد. دومی نشان میدهد آیا کلاینت آن مقصد را واقعاً به تونل مسیریابی میکند. سومی و چهارمی میگویند آیا درخواست رسید و آیا سیاستی آن را پس از رسیدن دور انداخت.
wg show ip route get 192.168.50.20 tcpdump -ni wg0 icmp iptables -vnL FORWARD --line-numbers
درخواستی که میرسد و پاسخی برنمیانگیزد به مسیر پاسخ یا میزبان LAN اشاره دارد. درخواستی که هرگز نمیرسد به AllowedIPs یا مسیر کلاینت اشاره دارد. این دو نتیجه اصلاحهای متفاوتی میخواهند، و ثبت بستهها همان چیزی است که آنها را از هم جدا میکند.