Tünelden neyin geçeceğini seçme
Bir ForestVPN yönlendiricisi için isteğe bağlı RouterOS tarifleri — bir uygulama grubunu gönderin, her şeyi gönderin ve tünel kapalıyken trafiğin sızmasını durdurun.
Güncellendi: 8 Ekim 2026
Bu sayfadaki her şey isteğe bağlıdır. Bir ForestVPN yönlendiricisi bağlandığı anda kendi trafiğini tünelden geçirir ve bunun için hiçbirine ihtiyaç yoktur. Bu, farklı bir iştir: LAN'ınızın trafiğinden hangisinin çıkıştan gideceğine ve çıkışa ulaşılamadığında ne olacağına karar vermek.
İş bölümü hiç değişmez. RouterOS, tünele neyin gideceğine karar verir, konteyner kendisine verilen her şeyi tünelden geçirir, ve hesabınız nereden çıkacağına karar verir. Yani bunların hepsi sıradan bir RouterOS yapılandırmasıdır — mangle işaretleri, bir yönlendirme tablosu, bir güvenlik duvarı kuralı — ve hiçbiri konteynere dokunmaz.
Önce bunu okuyun
Üç gerçek, bunlardan herhangi birinin işe yarayıp yaramayacağına karar verir. Onları atlamak, geri alamayacağınız bir gecedir.
Bunları, LAN'ınızı yönlendiren cihaza yapıştırın. RouterOS'un prerouting zinciri yalnızca
cihazın kendisinin yönlendirdiği trafiği görür. Gerçek ağ geçidinizin ardında yer alan bir erişim
noktasında, aşağıdaki her kural etkisizdir — kendi varsayılan rotası kendisinin yukarısındaki
yönlendirici olan bir cAP ax üzerinde ölçüldü: konteyner kusursuzca tünelledi ve hiçbir LAN
istemcisinin trafiği ona hiç yaklaşmadı. Konteyner o erişim noktasında yaşayabilir; kurallar ağ
geçidine gider.
Çıkış, cihaz başına yalnızca bir kaynak adresi kabul eder — verdiği overlay kiralamasıdır bu. Başka herhangi bir iç kaynaktan gelen bir paket, kurallarınız ne kadar doğru olursa olsun yönlendirilmez, düşürülür. Bir şeyin LAN'ınızı bu kiralama üzerine yeniden yazması gerekir ve bu şey konteynere bağlıdır:
| Konteyner | Bunun için yapmanız gereken |
|---|---|
suquant/fvpn — hesap tarafından yönetilen uygulama | Hiçbir şey. 0.3.9 sürümünden itibaren konteyner, kendisine yönlendirdiğiniz her şeyi kendi kiralaması üzerine gizler (masquerade) ve o kiralama değiştiğinde onu takip eder. Kurulum komutu bunu açar. |
suquant/fvpnq — yazdığınız bir .conf dosyasından ham tünel | .conf dosyanızdaki Address için bir src-nat ekleyin; bu, çıkışın AllowedIPs alanına koyduğunuz şeyin de aynısıdır. Siz seçtiğiniz için sabittir ve bir kural onu adlandırabilir. |
0.3.9'dan eski bir konteyner mi çalıştırıyorsunuz? Kurulum komutunu yeniden çalıştırın — aşağıdaki kurallar kusursuzca işaretleyip yönlendirecek ve çıkış her paketi düşürecektir; bu da yönlendirme kuralını eklediğiniz anda LAN'ın interneti tamamen kaybetmesi gibi görünür.
Fasttrack, mangle'ı atlar. MikroTik'in fabrika güvenlik duvarı, kurulmuş bağlantıları
fasttrack'ler ve fasttrack'lenmiş bir bağlantı bir daha asla mangle zincirine ulaşmaz — yani
işaretleriniz bir akışın yalnızca ilk paketine uygulanır, sonrasına değil. Aşağıdaki her tarif,
işaretlenmiş bağlantıları fasttrack'in dışında tutan tek kuralı içerir ve bu kuralın
fasttrack-connection kuralının üstünde durması gerekir.
Ve bu kuralların sizin için yapamayacağı IPv6 tarafı
Buradaki her şey IPv4'tür. Yönlendiricinizde çalışan bir IPv6 varsa, aşağıda seçtiğiniz her hedefe
v6 üzerinden de, tünelin etrafından dolaşarak erişilebilir ve hiçbir şey sizi uyarmaz. Bunun yerine
yönlendirici, bir v6 varsayılan rotası olmadan kendini bir IPv6 yönlendiricisi olarak duyuruyorsa,
LAN istemcileri ona v6 gönderir ve karşılığında hiçbir şey almaz — bir hata bile almazlar, çünkü
RouterOS 7'de v6 için erişilemez bir rota yoktur, yalnızca sessiz bir blackhole vardır. Happy
Eyeballs özelliği olmayan cihazlar — TV'ler, saatler, bir AAAA kaydında çıplak bağlantı kuran her
şey — her v6 hedefinde tam bir bağlantı zaman aşımı süresince takılır kalır; bu da “internet bazen
bozuluyor” gibi görünür ve suç Wi-Fi'ye atılır. Bu tek satır, ikisinden hangisinde olduğunuzu
bildirir:
# Does this router tell LAN clients it is their IPv6 router?
/ipv6/nd/print where ra-lifetime!=none
# Does it have somewhere to send their v6 traffic?
/ipv6/route/print where dst-address="::/0" and routing-table="main"Birincisine yanıt var, ikincisine yoksa bu ikinci durumdur. IPv6'ya gerçek bir varsayılan rota
verin ya da /ipv6/nd/set [find] ra-lifetime=none ile duyurmayı durdurun.
Adım 1 — iskele
Üç tarifin de aynısı. Kendi konteyner adresinizi 172.31.254.2 (bkz.
kurulum'un varsayılanı; /interface/veth/print bunu gösterir) yerine ve
kendi LAN önekinizi 192.168.88.0/24 yerine koyun.
Önce /container/print detail'i kontrol edin. remote-image'in 0.3.9 veya daha yenisini
söylemesi ve cmd'nin --nat-lan içermesi gerekir. İkisi de güncel kurulum
komutundan gelir; ondan önce kurulmuş bir konteynerde ikisi de yoktur ve
belirti, adım 2'de yönlendirme kuralını eklediğiniz anda LAN'ın interneti tamamen kaybetmesidir.
# A routing table of its own, so nothing here can disturb your normal
# default route.
/routing/table add name=via-fvpn fib
# Where marked traffic goes: the container, on the address RouterOS itself
# gave it.
/ip/route add dst-address=0.0.0.0/0 gateway=172.31.254.2 \
routing-table=via-fvpn comment="fvpn: traffic leaves via the container"
# Collapse the LAN to one source address on the way IN to the container. The
# exit never sees this one either -- the container masquerades again onto its
# own lease -- so this is about keeping your LAN's layout out of the
# container's connection table, not about being admitted.
/ip/firewall/nat add chain=srcnat out-interface=veth-fvpn action=masquerade \
comment="fvpn: hide LAN addressing from the container"
# The tunnel costs 80 bytes of MTU. Without this, large TCP flows stall
# rather than fail, which presents as "the internet is broken on Tuesdays".
/ip/firewall/mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu \
protocol=tcp tcp-flags=syn connection-mark=via-fvpn \
comment="fvpn: clamp MSS on tunnelled TCP"
# Fasttrack bypasses mangle, so marked connections have to be accepted
# before they reach it. This rule is inert if it ends up below the fasttrack
# rule -- check with /ip/firewall/filter/print that it did not.
/ip/firewall/filter add chain=forward action=accept connection-mark=via-fvpn \
place-before=[find action=fasttrack-connection] \
comment="fvpn: marked flows skip fasttrack"Ardından sonraki ikiden birini seçin. İkisi de aynı via-fvpn bağlantı işaretini üretir, bu
yüzden ikisini de yapıştırırsanız aynı trafik için çakışırlar.
Adım 2a — isteğe bağlı: yalnızca aramalar ve mesajlaşma uygulamaları
Aylardır kendi RB3011'imizde çalışan kurulum. Sorunu, trafiğin fiilen ayrıldığı şekilde böler: sinyalleşme birkaç satıcı ana bilgisayar adıdır, medya ise kimsenin yayımlamadığı röleler üzerindeki bir port aralığıdır.
# Signalling, by hostname. A hostname in a RouterOS address list is not a
# static entry -- the router resolves it and keeps the answers fresh, which
# is the only form that survives a CDN moving under you.
/ip/firewall/address-list
add list=fvpn-via address=g.whatsapp.net comment="fvpn: signalling"
add list=fvpn-via address=media.whatsapp.net comment="fvpn: signalling"
add list=fvpn-via address=mmg.whatsapp.net comment="fvpn: signalling"
add list=fvpn-via address=static.whatsapp.net comment="fvpn: signalling"
add list=fvpn-via address=web.whatsapp.com comment="fvpn: signalling"
add list=fvpn-via address=api.telegram.org comment="fvpn: signalling"
add list=fvpn-via address=core.telegram.org comment="fvpn: signalling"
add list=fvpn-via address=web.telegram.org comment="fvpn: signalling"
add list=fvpn-via address=chat.signal.org comment="fvpn: signalling"
add list=fvpn-via address=storage.signal.org comment="fvpn: signalling"
/ip/firewall/mangle
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
dst-address-list=fvpn-via \
comment="fvpn: signalling by resolved vendor hostname"
# Media, by port -- the half an address list can never cover, because a call
# lands on whichever TURN relay the vendor picked that minute.
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
protocol=udp dst-port=3478-3481 \
comment="fvpn: STUN/TURN media - calls in every major app"
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
protocol=tcp dst-port=3478-3481,5349,5350 \
comment="fvpn: STUN/TURN over TCP and TLS"
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
protocol=udp dst-port=5060,5061 comment="fvpn: SIP"
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
protocol=tcp dst-port=5060,5061 comment="fvpn: SIP over TCP/TLS"
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
protocol=tcp dst-port=5222,5223 comment="fvpn: XMPP signalling"
# One routing decision for the whole connection. Marking the connection
# first and the route second -- rather than marking the route directly -- is
# what keeps a call that started on the tunnel on the tunnel.
add chain=prerouting action=mark-routing new-routing-mark=via-fvpn \
passthrough=no src-address=192.168.88.0/24 connection-mark=via-fvpn \
comment="fvpn: route marked connections via the exit"Ana bilgisayar adları bir başlangıç noktasıdır, bir otorite değil. Satıcılar kimseye haber
vermeden bunları ekler ve kaldırır. Sıfırda kalan sayaçlar için /ip/firewall/mangle/print stats'i
kontrol edin — bu, sessizce işini yapan bir kural değil, hiçbir şeyi eşleştirmeyen bir kuraldır.
Adım 2b — isteğe bağlı: her şey
/ip/firewall/mangle
# The container's own packets must never be marked, or its tunnel gets
# routed into itself. The install puts the container's interface in the LAN
# list, so the rule below WOULD match it. Substitute the container's
# address.
add chain=prerouting action=accept src-address=172.31.254.2 \
comment="fvpn: never mark the container's own traffic"
# Everything from the LAN that is not addressed to this router.
# `dst-address-type=!local` is what keeps DNS, WebFig and the status page
# off the tunnel; `in-interface-list=LAN` rather than a source prefix keeps
# the rule correct when the LAN is renumbered.
add chain=prerouting action=mark-connection new-connection-mark=via-fvpn \
in-interface-list=LAN dst-address-type=!local \
comment="fvpn: everything from the LAN"
# `dst-address-type=!local` on this rule too, and it is not decoration. The
# install puts the container's veth in the LAN list, so replies coming back
# OUT of the container also match `in-interface-list=LAN`, and they still
# carry the connection mark. Mangle prerouting runs before dstnat, so at
# this moment their destination is still the router's own srcnat address --
# local. Without the test they would take the routing mark and be sent back
# into the container instead of on to the client that asked.
add chain=prerouting action=mark-routing new-routing-mark=via-fvpn \
passthrough=no in-interface-list=LAN dst-address-type=!local \
connection-mark=via-fvpn \
comment="fvpn: route marked connections via the exit"Test etmeden önce yapıştırdığınızı sayın. /ip/firewall/mangle/print, bu üç kuralın da
göründüğünü göstermelidir. Satır devamlarından birini düşüren bir terminal yapıştırması, sizi
işaretleme kurallarıyla ve yönlendirme kuralı olmadan bırakır; bu da tam olarak “tünel yok
sayılıyor” gibi görünür — bağlantılar connection-mark=via-fvpn taşır, hiçbir şey tabloya
başvurmaz ve her paket normal bağlantınız üzerinden çıkar.
Her şeyi gönderirseniz DNS'i de göndermiş olursunuz — zaten amaç budur, ama bu, çıkışın
çözümleyicisinin LAN'ınıza yanıt vereceği anlamına gelir. Bunun istediğiniz mod olduğuna karar
vermeden önce, yerel adlara bağımlı olan her şeyin (bir yazıcı, bir NAS, router.lan) hâlâ
çözümlendiğini kontrol edin.
Adım 3 — isteğe bağlı: acil kapatma anahtarı
Seçici yönlendirmenin kapatılmaya değer bir başarısızlık modu vardır: tünel durduğunda, işaretlenmiş trafik sessizce normal bağlantınız üzerinden çıkmaya geri dönebilir. Bu üç kural bunun yerine durmasını sağlar. Seçtiğiniz tarifin ardından bunları ekleyin.
Bu bölümdeki her komut, yazılmadan önce RouterOS 7.24.1 üzerinde çalıştırıldı. Söz dizimi, aşağıda işaretlenen bir yerde RouterOS 6'dan farklıdır.
# 1. The route to the container counts only while the container answers.
/ip/route/set [find routing-table=via-fvpn dst-address=0.0.0.0/0] \
check-gateway=ping
# 2. When it stops counting, drop rather than fall back. The higher distance
# keeps this route inactive for as long as the real one is up. `blackhole`
# is a bare flag here, not `type=blackhole` -- RouterOS 7 has no `type`
# property on a route at all, and rejects it with "bad parameter type".
/ip/route/add dst-address=0.0.0.0/0 blackhole distance=10 \
routing-table=via-fvpn comment="fvpn: kill switch - no exit, no traffic"
# 3. The leak the first two cannot see: a container that is alive and
# answering ping while its own tunnel is down forwards to its default
# gateway, which is you. Traffic wearing the address the srcnat above gave
# it must never reach the internet directly. Substitute your router's own
# address on the container's /30 if you changed it.
/ip/firewall/filter/add chain=forward action=drop src-address=172.31.254.1 \
out-interface-list=WAN \
place-before=[find comment="fvpn: marked flows skip fasttrack"] \
comment="fvpn: kill switch - overlay source must not leave over WAN"Kural 3, adım 1'deki fasttrack muafiyeti kuralının üstünde durmalıdır, aksi hâlde o kural
trafiği önce kabul eder ve düşürme kuralına hiç ulaşılmaz. Burada bunu place-before yapar;
/ip/firewall/filter/print ile doğrulayın.
Daha katı sürüm: yalnızca tüneli kullanabilecek cihazlar
“Bu dizüstü bilgisayarın tünellenmeden interneti olmasın” demek istediğiniz asıl şey buysa, bunu yönlendirme durumundan çıkarım yapmak yerine doğrudan söyleyin:
/ip/firewall/address-list/add list=fvpn-only address=192.168.88.50 \
comment="fvpn: the work laptop"
/ip/firewall/filter/add chain=forward action=drop src-address-list=fvpn-only \
out-interface-list=WAN \
place-before=[find comment="fvpn: marked flows skip fasttrack"] \
comment="fvpn: kill switch - these devices are tunnel-only"O cihaz artık, yönlendirme tabloları herhangi bir sabah ne derse desin, ya konteyner üzerinden internete ulaşır ya da hiç ulaşmaz.
İşe yaradığını kontrol etme
# A rule sitting at zero packets is a rule matching nothing.
/ip/firewall/mangle/print stats
/ip/route/print where routing-table=via-fvpn
# The fasttrack-exemption rule has to be above the fasttrack rule.
/ip/firewall/filter/printBir LAN cihazından herhangi bir “IP adresim nedir” sayfası açın. Seçtiğiniz trafik için çıkışın ülkesini, geri kalan her şey için kendi ülkenizi göstermelidir. Her şey için kendi ülkenizi gösteriyorsa, olağan neden bu sayfadaki ilk gerçektir: kurallar, LAN'ı yönlendirmeyen bir cihazın üzerindedir.
Geri alma
Yukarıdaki her satır fvpn: ile başlayan bir yorum taşır, bu yüzden onları kaldırmak kesindir — ve
kurulumun forestvpn olarak yorumladığı konteynerin kendi nesnelerine dokunmaz.
/ip/firewall/mangle/remove [find comment~"^fvpn:"]
/ip/firewall/filter/remove [find comment~"^fvpn:"]
/ip/firewall/nat/remove [find comment~"^fvpn:"]
/ip/firewall/address-list/remove [find comment~"^fvpn:"]
/ip/route/remove [find comment~"^fvpn:"]
/ip/address/remove [find comment~"^fvpn:"]
/routing/table/remove [find name="via-fvpn"]Konteyner çalışmaya devam eder, hesap bağlantısını korur ve yalnızca kendi trafiğini tünellemeye geri döner. Başka bir şey yanlışsa, sorun gidermeye bakın.