GÜNCELLEME: Artık bu çözüm yerine AmneziaWG kullanmanızı öneririm. udp2raw yerine onu kullanıyorum ve sorunsuz çalışıyor.
Yıllardır çeşitli servis sağlayıcılarda Wireguard protokolüne bant sınırlaması veya topyekün yasak bulunuyor. Büyük ihtimal ticari VPN servislerinin Wireguard protokolünü kullanmasının artmasıyla, sadece bu servisleri engellemeye çalışmak yerine, bu teknolojiyi tümden engellemeye karar verildi. Bant sınırlamasında protokolü tamamen engellemedikleri için, sunucunuza bağlanabildiğinizi düşünebilirsiniz, fakat çok ciddi paket kayıpları nedeniyle aslında bağlantınız tamamen boğuluyor.
Bu sınırlamaya çözüm olarak yapabileceğiniz tek şey, Wireguard paketlerini bir TCP tüneli içine alarak sansür mekanizmasından gizlemektir. Bunu yaparken de, minimum overhead, maksimum performans ve sunucuya minimum yük getirmesi amacıyla basit xor şifrelemesine sahip bir tünel içerisinden geçirmeniz en doğrusu olacaktır. Wireguard halihazırda şifreli olduğu için bir güvenlik zaafiyeti oluşmayacaktır. Sınırlama tüm UDP trafiği üzerinde çalıştığı için port değiştirmek vb. denemeleriniz çözümsüz kalacaktır.
Çözümün çalışabilmesi için hem istemci tarafında hem de sunucu tarafında size ait bir linux ağ geçidi bulunması gereklidir. İstemci tarafında ağ geçidiniz yoksa, düşük maliyetli bir Raspberry Pi 4 üzerine Wireguard kurarak bu çözümü kullanabilirsiniz. Bu noktadan sonra vereceğim adımlar, hem istemci, hem de sunucu tarafında systemd altyapısıyla çalışan (Debian/Ubuntu vb.) bir Linux sürümü üzerinde, konfigürasyonu tamamlanmış bir Wireguard kurulumunuz olduğu varsayımıyla devam edecektir:
- Bu bağlantıdan
udp2rawadlı uygulamanın binary arşivini indirin. Tar.gz dosyasını açtıktan sonra farklı mimariler için binary’ler olduğunu göreceksiniz. Hem sunucunuza hem de istemcinize uygun binary’leri, ilgili cihazda/usr/local/bin/dizini altınaudp2rawismiyle kopyalayın veya linkleyin. - Sunucunuzda
/etc/udp2raw.confdosyasını oluşturun ve içine aşağıdaki bilgileri girin. Burada kendi konfigürasyonunuza uygun olarak doğru bilgilerle düzenlemeniz gereken alanlar:TCP_PORTsunucunuzun dinleyeceği boş bir TCP portu,WIREGUARD_PORTsunucunuzun halihazırda dinlediği Wireguard portu vePASSWORDoluşturacağınız uzun alfanumerik bir şifre.
-s
# Local
-l 0.0.0.0:TCP_PORT
# Remote
-r 127.0.0.1:WIREGUARD_PORT
# Key
-k PASSWORD
--auth-mode hmac_sha1
--raw-mode faketcp
-a
--fix-gro
--cipher-mode xor
- İstemci ağ geçidinizde yine
/etc/udp2raw.confdosyasını oluşturun ve aşağıdaki bilgileri girin. Burada da düzenlemeniz gereken alanlar:LOCAL_PORTağ geçidinizin dinleyeceği UDP portu,SERVER_IPsunucu IP adresiniz,SERVER_TCP_PORTyukarıda sunucu için girdiğiniz TCP portu vePASSWORDyine yukarıda girdiğiniz aynı alfanumerik şifre.
-c
# Local
-l 0.0.0.0:LOCAL_PORT
# Remote
-r SERVER_IP:SERVER_TCP_PORT
# Key
-k PASSWORD
--auth-mode hmac_sha1
--raw-mode faketcp
-a
--fix-gro
--cipher-mode xor
- Hem sunucuda hem de istemcide
/etc/systemd/system/udp2raw.servicedosyasını oluşturarak içine aşağıdaki bilgileri girin:
[Unit]
Description=udp2raw service
ConditionFileIsExecutable=/usr/local/bin/udp2raw
ConditionPathExists=/etc/udp2raw.conf
After=network.target
[Service]
Type=simple
User=root
Group=root
#LimitNOFILE=32768
PIDFile=/run/udp2raw.pid
AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN
ExecStart=/usr/local/bin/udp2raw --conf-file /etc/udp2raw.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
- Her iki cihazda da şu komutları çalıştırın:
systemctl enable udp2raw.servicesystemctl start udp2raw.service - Eğer doğru binary’leri kullandıysanız, şu anda
udp2rawkonfigürasyonunuz tamamlanmış demektir. Yapmanız gereken son şey, istemci ağ geçidinizin Wireguard konfigürasyonunda sunucu bilgisi olarak yine istemci ağ cihazınızınudp2rawkonfigürasyonunda yazdığınızLOCAL_PORTbilgisini girmek veMTUdeğerini1280olarak ayarlamaktır. Yani aşağıdakine benzer bir değişiklik yapmanız gerekiyor:
Endpoint = 127.0.0.1:LOCAL_PORT
MTU = 1280
Ayrıca iOS ve Android üzerinde Wireguard uygulamasını kullanıyorsanız, o uygulamanın konfigürasyonunu da istemci ağ geçidinizin dinlediği udp2raw portuna yönlendirerek o cihazlarınızı da aynı TCP tüneli içinden bağlayabilirsiniz.
Tüm bu değişiklikleri yaptığınızda çok düşük bir performans kaybı ile Wireguard sunucunuza ulaşabilmeye devam edeceksiniz.
11 responses to “Türkiye’de Wireguard engelleme çözümü”
Merhaba kerem bey;
Wireguard raspi 4 superonline fiber iphone turkcell mobil data baglantisinda
1280 mtu disinda ping dusurucu nasil optimizasyon yapilabilinir?
Tesekkurler
Eğer fiberdeyseniz zaten 1500 MTU kullanmak daha mantıklı olacaktır muhtemelen.
Merhaba.
Adroid için de kurulum yapabilir misiniz?
Android kullanmadığım için ne yazık ki yorum yapamıyorum.
Don’t you have to change the AlowedIPs of wireguard client? If the AllowedIPs = 0.0.0.0/0 then the packets sent from the udp2raw tunnel also go through the wg peer interface, causing the connection to break.
No. When you have AllowedIPs = 0.0.0.0/0, you’ll already need to have PostUp and PostDown configurations in place which add/delete a direct route to your server, which were not discussed here. You can see the example configuration on https://keremerkan.dev/posts/wireguard-mtu-fixes/
Thanks, I get it now. Although unfortunately I haven’t been able to make udp2raw work with WireGuard. Do you know any specific log line I should be looking for to check whether there is an error or not?
I haven’t used udp2raw for quite some time and my current home server is Apple Silicon so I cannot run udp2raw on it for troubleshooting. You can check https://keremerkan.dev/posts/udp2raw-bypass-censoring-wireguard-protocol/ that I just translated to English to see if something was lost in translation and if that still does not work, you can send your config with confidential info redacted so I can take a look. You can find my email on https://keremerkan.dev/contact/
Thanks I will check it out and see if I can make it work
Alti aydir kusursuz calisan ve yurtisindaki evimle Turkiye’deki yazligimi birbirine baglayan site-to-site WireGuard VPN baglantim anlasilmayan bir sebeple 18 Ekim 2021 Pazartesi gunu itibariyla birden bire durdu. Goruldugu kadariyla, yurtdisindan cikip TR’ye giden UDP paketleri TR’ye ulasiyor ama TR’dan cikanlar yolda Turk Telekom tarafindan bloke ediliyor gibi. Ayni durumda olan baskalari var mi?
The WireGuard site-to-site VPN connecting my Summer home in Turkey and my house overseas all of a sudden stopped working as of October 18, 2021 after running flawlessly for over six months. I can see the UDP packets leaving my firewall in Turkey but they never reach the other firewall, which tells me Turkish Telekom decided to block these packets. The packets leaving my overseas firewall are received by the firewall in my Turkish home. So, the outbound VPN traffic from Turkey seems to be the problem. Did anyone else experience this on the same date?
Şu anda Turkcell ve Vodafone üzerinden böyle bir sorun gözlemlemiyorum.