Saat ini,
kami meluncurkan akses ke server berbasis pada
WireGuard dan hari ini saya ingin berbicara tentang cara mengkonfigurasi klien yang berada di belakang NAT, walaupun kami juga tidak akan melupakan konfigurasi server.
Pertama, tentang kelebihan WireGuard dan sisi sebaliknya dari koin, tentang kesulitan yang muncul bersama dengan kelebihannya. WireGuard adalah implementasi terowongan yang cukup muda antara dua titik, sebagai protokol transmisi yang digunakan oleh UDP. Itulah sebabnya, dan juga karena implementasi Linux itu sendiri diimplementasikan sebagai modul kernel, tes menunjukkan keunggulan kecepatan yang layak atas pesaing. Ini tidak dapat dianggap sebagai jaringan peer-to-peer, meskipun node akhir disebut
Peer . Esensi dari jaringan peer-to-peer tidak hanya memungkinkan untuk menghubungkan dua node arbitrer. Tentu saja, dengan toolkit ini, Anda dapat membangun infrastruktur jaringan yang sangat rumit, tetapi saya tidak memiliki tujuan seperti itu. Kami akan mempertimbangkan untuk terhubung ke node server dan mengakses Internet melalui itu.
Jelas, jika dua node, server dan satu klien memiliki IP
putih , dalam hal ini seharusnya tidak ada kesulitan dalam pengaturan. Tetapi seringkali klien berada di belakang NAT, dan dalam hal ini, ketika mengatur server, Anda harus menentukan alamat IP yang salah yang dikeluarkan / didaftarkan pada perangkat. Dalam hal ini, protokol STUN dapat membantu. Protokol ini sering digunakan ketika bekerja dengan VoIP, terutama ketika kedua klien berada di belakang NAT. Tetapi dalam kasus kami, itu juga akan membantu. Dilihat dari informasi di Wikipedia, STUN tidak bekerja dengan semua jenis NAT, di salah satu dari 4 jenis NAT, klien (simetris) dapat memiliki IP berbeda dari yang dapat ditentukan secara eksternal menggunakan klien STUN.
Klien STUN ada di semua sistem operasi populer kecuali iOS. Di bawah sistem operasi ini, saya tidak dapat menemukan klien STUN. Saya akan memberikan contoh untuk macOS. Pertama, Anda harus menginstal klien STUN itu sendiri.
$ brew install stunman
Ada banyak server STUN di Internet dan tidak sulit untuk menemukan server apa pun untuk pengujian. Saya akan menggunakan
stun.ekiga.net . Untuk pengujian, Anda harus menggunakan port lokal, yang akan kami gunakan untuk mengonfigurasi:
$ stunclient --localport 51820 stun.ekiga.net
Dengan tes yang berhasil, kami mendapatkan kira-kira kesimpulan berikut:
Binding test: success Local address: 192.168.88.23:51820 Mapped address: 82.207.27.3:51820
Alamat yang dipetakan adalah IP yang Anda perlukan untuk mengatur server. Bahkan, ini adalah alamat IP yang dalam kasus saya akan memberikan layanan apa pun untuk menentukan IP eksternal. Oleh karena itu, Anda dapat menggunakan
layanan favorit Anda untuk menentukan IP, tetapi tentu saja, ada baiknya mempertimbangkan bahwa tes ini akan tidak langsung dan tidak ada jaminan bahwa semuanya akan berfungsi sebagaimana dimaksud.
Untuk terhubung, di sisi klien, untuk server, Anda harus memberikan: IP, port, dan kunci publik. Untuk konfigurasi di sisi klien, Anda perlu daftar yang sama persis yang disediakan di sisi server. Selanjutnya, saya akan menyarankan opsi untuk konfigurasi, jika Anda akan menggunakannya sebagai contoh, disarankan untuk membuat ulang kunci.
Di Linux, ini dapat dilakukan dari baris perintah, di macOS melalui UI klien resmi.
$ wg genkey | tee privatekey | wg pubkey > publickey
Dalam hal ini, di tempat panggilan, kunci pribadi akan dibuat dalam file privatekey, publik di dalam publickey, masing-masing.
Pertama, pertimbangkan konfigurasi klien:
# [Interface] # PrivateKey = YPuKo2QXndQ2Vc3S/y90oKT7AJ0Swhq/HWKiF7GwS04= # ListenPort = 51820 # IP , # Address = 10.8.0.2/24 # DNS , DNS = 8.8.8.8 # [Peer] # , PublicKey = nFjDIkgsAh1RMZuaCJ+AKs7JmbMxxthhZ0POjUSTvkc= # , # IP , # , # WireGuard . IP , # . AllowedIPs = 0.0.0.0/0 # IP Endpoint = 46.101.122.130:51820 # 2 . - , , # AllowedIPs # . - # , - 25 . PersistentKeepalive = 25
Sekarang saatnya untuk konfigurasi server:
# [Interface] # IP Address = 10.8.0.1/24 # ListenPort = 51820 # , PrivateKey = MNnxOy79xtXtSQ3UySWtdlOMbG7ff9dXGjeSTPEByn8= # 2 , wg0 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # [Peer] # , PublicKey = TdRtYd6XXI+ynPDXU6FF5TT3L5t/YlQVZswr2xsou34= # IP , , # AllowedIPs = 10.8.0.2/32 # IP , , STUN EndPoint = 82.207.27.3:51820
Saat menggunakan konfigurasi ini sebagai contoh, disarankan untuk menghapus komentar dalam bahasa Rusia, server dan klien dalam hal komentar tidak dijamin.Saya menggunakan sumber daya berikut untuk mengonfigurasi:
situs resmi ,
ArchWiki, dan
tutorial ini .
Pada akhirnya, saya juga ingin mengklarifikasi beberapa pertanyaan yang mungkin:
1. Apakah mungkin membuat beberapa bagian dari
Peer yang sama di server, yang akan berbeda hanya di
EndPoint ?
Ya itu mungkin, dan bahkan dapat berguna jika Anda menggunakan layanan dari tempat yang berbeda, misalnya, di tempat kerja dan di rumah. Tetapi masalah dapat muncul jika
Peers tersebut online secara bersamaan, dalam hal ini akan ada konflik alamat IP.
2. IP dan port eksternal apa yang akan ditentukan oleh protokol STUN untuk beberapa klien per NAT?
Sama untuk semua pelanggan, itu akan sama. Apakah ini akan menjadi masalah? Itu semua tergantung pada pengaturan penyedia / router Anda, tetapi pada dasarnya tidak ada masalah yang muncul, karena router harus menyiarkan paket UDP di dalam jaringan oleh mask jaringan lokal, masing-masing, pihak penerima yang dapat mendekripsi paket harus berhasil menerimanya. Kami melakukan tes pada peralatan kami, tes berhasil.
Tujuan artikel ini bukan untuk menulis tutorial lengkap tentang cara mengkonfigurasi WireGuard, tidak sulit untuk melakukan menggunakan dokumentasi resmi. Kami ingin menunjukkan bagaimana WireGuard dapat bekerja untuk NAT.
Jika Anda ingin mencoba WireGuard dalam bisnis, Anda dapat menghubungi
kami , kami memiliki akses dalam mode uji.
UPD:Seperti yang ditunjukkan dengan tepat oleh penghuni
asli , hanya satu IP putih yang cukup untuk saluran data untuk bekerja tanpa masalah. Dengan demikian,
EndPoint for
Peer dapat dihilangkan dari konfigurasi server, dan ini membuat konfigurasi lebih mudah. Dan manual yang dijelaskan dapat bermanfaat jika kedua node berada di belakang NAT.