- Traefik कंटेनर environment में लोकप्रिय है, लेकिन इसे single Go executable के रूप में deploy किया जा सकता है, इसलिए container engine के बिना भी इसे reverse proxy के तौर पर चलाया जा सकता है
- यह nginx/caddy/apache2 जैसी file को सीधे serve करने वाली श्रृंखला के बजाय HAProxy के करीब proxy है, और request forwarding, response return और header adjustment पर केंद्रित है
- Docker label इस्तेमाल न करने पर भी इसे configuration file provider से configure किया जा सकता है, और static configuration व dynamic configuration को अलग करके router, service और middleware manage किए जाते हैं
- TLS Passthrough और HAProxy के PROXY protocol input/output को support करता है, लेकिन PROXY protocol को target service का भी support करना जरूरी है; apache2 और nginx इसे support करते हैं
- authentication integration और user agent/IP blocking के लिए सिर्फ built-in features पर्याप्त नहीं हो सकते, इसलिए ForwardAuth, oauth2-proxy और third-party plugins के management burden को भी साथ में आंकना चाहिए
कंटेनर के बाहर भी इस्तेमाल हो सकने वाला Traefik
- Traefik पिछले कुछ वर्षों में home-lab YouTube space में लोकप्रिय हुआ है, और इसे मुख्य रूप से Docker या Kubernetes जैसी container infrastructure के साथ पेश किया जाता है
- feature nature के लिहाज से यह nginx/caddy/apache2 की तुलना में HAProxy के अधिक करीब है
- requests को services तक forward करता है और responses लौटाता है
- headers और request/response के कुछ हिस्सों को modify कर सकता है
- file serving support नहीं करता
- container environment में Traefik को भी container के रूप में run करके Docker socket mount किया जा सकता है, जिससे यह दूसरे containers को automatically detect कर सकता है
- proxy behavior को container के Docker labels से configure किया जा सकता है
- नया container detect होने पर Let’s Encrypt TLS certificate automatically request करके service को expose किया जा सकता है
single binary और systemd deployment
- Traefik Go में लिखा गया है और single executable file के रूप में compile होता है
- binary distribution Traefik installation docs से मिल सकता है
- container engine के बिना Traefik खुद और target services, दोनों को run किया जा सकता है
- systemd service unit का example Traefik repository में है
- real operations में configuration files के अलावा अलग user बनाना और configuration file permissions set करना भी जरूरी होता है
configuration file आधारित setup
- container इस्तेमाल न करने पर Docker labels use नहीं किए जा सकते, लेकिन Traefik को file provider से configure किया जा सकता है
- configuration मोटे तौर पर दो हिस्सों में बंटती है
- static configuration: Let’s Encrypt जैसे certificate providers और Traefik जिस port पर listen करता है, वे entrypoints रखती है
- dynamic configuration: routers, services और middlewares रखती है
- Traefik filesystem events detect करके dynamic configuration को hot reload कर सकता है
- documentation core concepts और configuration examples हर तरीके के अनुसार देती है
- certificate provider, entrypoint, router, service, middleware जैसे terms Traefik documentation में जल्दी देखे जा सकते हैं
configuration के बाद behavior और debugging
- configuration सही न होने पर Traefik warnings दिखाता है
- default logs बहुत ज्यादा नहीं होते, लेकिन request किस path से गुजर रही है, यह समझना आसान होता है
- एक user experience के मुताबिक initial configuration जल्दी खत्म हो गई और कोई arbitrary समस्या नहीं आई
TLS Passthrough और PROXY protocol
- Traefik TLS Passthrough support करता है
- proxy पर TLS terminate किए बिना, अपने TLS certificate देने वाली web service तक traffic forward किया जा सकता है
- ऐसी configuration भी संभव है जिसमें service Traefik से होकर Let’s Encrypt certificate सीधे request करे
- proxy forwarded content को देख नहीं सकता
- सामान्य virtual host selection HTTP
Hostheader से होता है, लेकिन TLS Passthrough में यह header encrypted body के अंदर होता है, इसलिए इसे इस्तेमाल नहीं किया जा सकता - target host चुनने के लिए TLS का SNI(Server Name Indication) इस्तेमाल होता है, और Traefik तथा कई web servers/proxies इसी तरीके का उपयोग करते हैं
- HAProxy का PROXY protocol भी input/output support करता है
- यह वह तरीका है जिससे user के पहले proxy तक पहुंचने पर गायब हो जाने वाली जानकारी target service तक पहुंचाई जाती है
- इसे पुराने
X-Forwarded-...headers की तुलना में security के लिहाज से संभालना आसान माना जाता है - target service को भी PROXY protocol support करना चाहिए
- apache2 और nginx support करते हैं, और supported services की list भी बढ़ रही है
authentication integration में बची कमी
- nginx में Vouch Proxy इस्तेमाल करके कुछ services को Azure AD, अब Microsoft Entra authentication, से protect करने वाला setup संभव है
- Traefik nginx के authentication method जैसी ForwardAuth support करता है
- Vouch Proxy अभी Traefik में काम नहीं करता और संबंधित issue खुला है
- Keycloak instance खुद operate करके उसे AAD के साथ integrate कर ForwardAuth में use किया जा सकता है, लेकिन initial setup और security maintenance/updates का burden बड़ा है
- traefik-forward-auth अक्सर recommend होता है, लेकिन आखिरी update June 2020 में हुआ था और dependencies updates की जरूरत है, इसलिए इसे इस्तेमाल करना कठिन माना गया
- oauth2-proxy के साथ पुराना experience अच्छा नहीं था, और proxy के पीछे एक और proxy रखने पर HTTP/2, HTTP/3, timeouts, body size, WebSocket settings को हर intermediate proxy पर match करना पड़ता है, जिससे errors की संभावना बढ़ती है
- 2024-05-06 update के अनुसार oauth2-proxy को HTTP API से भी integrate किया जा सकता है
- nginx का auth_request support करता है
- Traefik का ForwardAuth support करता है
- यह तरीका desired configuration के करीब विकल्प लगता है
user agent और IP blocking
- ऐसी स्थितियां होती हैं जहां internal service का archive.org पर archive होना नहीं चाहिए
- robots.txt और similar headers Archive.org blocking में effective नहीं हैं, और crawler blocking के तरीके
archive.org_botuser agent blocking या IP range blocking हैं - Traefik में user agent या IP address block करने के लिए built-in feature नहीं, बल्कि third-party plugin की जरूरत होती है
- user agent blocking plugin
- deny IP plugin
- third-party plugins पर updates के समय ध्यान देना पड़ता है और ये security vulnerabilities पैदा कर सकते हैं, इसलिए इन्हें prefer नहीं किया जाता
- IPAllowList middleware से block किए जाने वाले IPs को छोड़कर बाकी को allow करने का तरीका संभव है
- IP range calculation भी संभव है
- यह direct blocking से खराब नहीं है, लेकिन सिर्फ बचे हुए subnets देखकर यह जानना कठिन है कि कौन-सी range block की गई है, इसलिए यह elegant नहीं है
configuration example structure
- example
/etc/traefik/traefik.ymlऔर/etc/traefik/dynamic.ymlमें बंटा है - static configuration निम्न को configure करती है
:80और:443entrypoints- HTTP endpoints को बिना exception HTTPS पर redirect करना
- TLS challenge इस्तेमाल करके Let’s Encrypt certificate issuance
- dynamic configuration file
/etc/traefik/dynamic.ymlको watch करना
- dynamic configuration में निम्न setup शामिल है
cloud.xx.xyzके लिए TLS Passthrough TCP routing- किसी दूसरे host की
10.33.1.2:4433service तक forward करना - PROXY protocol version 2 enable करना
git.xx.xyzके लिए localhttp://127.0.0.1:3000पर TLS termination के बाद proxy करनाhttps://xx.xyz/redirmeplsकोhttps://google.comपर redirect करने वाला middlewareX-Robots-Tag: noindex, nofollow, nosnippet, noarchiveheader जोड़ने वाला middleware
1 टिप्पणियां
Hacker News की राय
Traefik काफ़ी अच्छा है, लेकिन यह Ansible जैसी ही भयानक समस्या से जूझता है। docs और लेख बहुत हैं, पर असल में जो चाहिए वह मिल ही नहीं पाता
मैं v1 से इसका इस्तेमाल कर रहा हूं, फिर भी docs में अक्सर रास्ता भटक जाता हूं और बहुत झुंझलाहट होती है। छोटे projects में मैं Caddy इस्तेमाल करना पसंद करता हूं, क्योंकि उसके docs Traefik जितने खराब नहीं हैं
technical docs लिखने वालों से कहूं तो, example-focused docs सिर्फ़ सरसरी नज़र डालने वाले beginners के लिए अच्छे होते हैं। जो लोग product से परिचित हैं, उन्हें 10 tutorial pages में बिखरी field descriptions नहीं, बल्कि reference docs और complete lists चाहिए। सिर्फ़ onboarding process पर ध्यान न दें; उन लोगों के हिसाब से भी बनाएं जो रोज़ product इस्तेमाल करते हैं
यही बात सबसे ज़्यादा खटकती है, और यही वजह है कि मुझे Ansible से इतनी चिढ़ हो गई; Traefik भी कुछ कम स्तर पर वैसा ही है
वे मानकर चलते हैं कि बहुत सरल काम सिर्फ़ बहुत flat data structures पर किए जाएंगे, जबकि असल दुनिया में ज़्यादातर ऐसा नहीं होता। ऐसी languages को ठीक से इस्तेमाल करने के लिए YAML कैसे लिखना है, इस पर implicit rules का पूरा set समझना पड़ता है, लेकिन docs उसमें शायद ही मार्गदर्शन देते हैं
हर module की अपनी configuration docs होती हैं, लेकिन standard configuration कैसे इस्तेमाल करें, returned data को कैसे handle करें या उसे थोड़ी भी complex चीज़ के साथ कैसे combine करें—यह लगभग कभी साफ़ नहीं होता। ऐसा लगता है जैसे हर item के लिए एक paragraph वाले दर्जनभर examples को ingredients के ढेर की तरह फेंक दिया गया हो और कहा गया हो कि अब cake bake करो
मैंने जिन कई YAML interpreter systems का इस्तेमाल किया है, उनमें लगभग हमेशा यही अनुभव रहा। YAML की लाखों lines से गुज़रने के बाद ही काम निकालना आया, लेकिन docs की value configuration lists से ज़्यादा बहुत कम थी
फिर भी
ansible-docइस्तेमाल करते हुए मुझे एक काफ़ी ठीक workflow मिला है, और मेरे अक्सर इस्तेमाल होने वाले aliases हैंalias adl='ansible-doc --list',alias adls='ansible-doc --list | less -S',alias ad='ansible-doc'पहले
adlsसे relevant commands जल्दी search करता हूं, फिरadसे docs देखता हूं, और लगभग हमेशा अंत में सीधे jump करके (G) examples देखता हूं। आमतौर पर वही जवाब वहीं मिल जाता है जिसकी ज़रूरत होती हैAnsible scripts लिखना docs पर बहुत निर्भर है, इसलिए मेरा मानना है कि default state में भी इस lookup process को बेहतर support करना चाहिए और ऐसा interface देना चाहिए जिससे ढेर सारे aliases बनाए बिना जल्दी खोजा जा सके
बेशक यह उनका अपना project है, लेकिन किसी object का एक method ढूंढने के लिए हर बार लंबी prose pages खंगालनी पड़ती हैं। कभी-कभी तो source पढ़ लेना ही आसान होता है
प्रोडक्शन में Traefik को 2 साल तक इस्तेमाल किया है। पहले NGINX इस्तेमाल करता था, लेकिन automatic Let's Encrypt integration की वजह से Traefik पर जाने का फैसला किया, और उस फैसले का अफसोस है
Traefik की documentation मुझे और मेरी टीम को ठीक से समझ नहीं आती। यह झंझट वाला है, और सही logs के बिना अजीब तरह से behave करता है
उदाहरण के लिए, certificate दोबारा बनाने की कोशिश करें तो यह बीच-बीच में fail हो जाता है और production इस हालत में down हो जाता है कि पता नहीं कब recover होगा। अब वापस NGINX पर लौट रहे हैं
configuration.nixमें बस कुछ lines जोड़कर configure किया जा सकता है, और अंदर से यहlego(1)और letsencrypt इस्तेमाल करता हैsecurity.acme = { acceptTerms = true; defaults.email = "admin-email@provider.net"; certs."mydomain.example.com" = { domain = "*.mydomain.example.com"; dnsProvider = "cloudflare"; environmentFile = "/path/to/cloudflare/password"; }; };services.caddy.enable = true;services.caddy.virtualHosts."subdomain1.mydomain.example.com" = { extraConfig = '' reverse_proxy 127.0.0.1:1234 ''; useACMEHost = "mydomain.example.com"; };nginx से configure करना भी काफी मिलता-जुलता होगा। https://github.com/go-acme/lego
वही domain registrar, वही API, वही Docker configuration थी, और logs भी सभी on थे, लेकिन certificate क्यों नहीं बन रहा था इसकी कोई जानकारी नहीं थी। ऐसा लगा जैसे उसने कोशिश तक नहीं की और बस generated default certificate पर वापस चला गया
दो troubleshooting sessions और कई घंटों की searching के बाद हार माननी पड़ी और self-signed certificate file इस्तेमाल करनी पड़ी। क्यों नहीं चल रहा इसकी कोई जानकारी न होना, और चुपचाप fail होकर fallback behavior पर चले जाना वाकई परेशान करने वाला है
कुल मिलाकर Traefik की सबसे बड़ी समस्या यही रही। जब चलता है तो शानदार है, लेकिन जब नहीं चलता, तो troubleshoot करना या documentation में जरूरी जानकारी ढूंढना हमेशा मुश्किल रहा। कंपनी में साल के अंत के आसपास production में Traefik इस्तेमाल करना शुरू करने की योजना है, इसलिए उम्मीद है उससे पहले Traefik से थोड़ी और जान-पहचान हो जाए
सबसे अच्छी बात यह है कि कोई configuration language नहीं है। बस Go इस्तेमाल करें
बाद में पता चला कि DNS ठीक से set न हो तो validation attempt N बार fail होने के बाद Let's Encrypt कुछ समय तक TLS-01 validation दोबारा reject कर देता है, और आपकी समस्या भी कुछ इसी तरह की लगती है
DNS-01 validation पर जाने के बाद experience अचानक काफी बेहतर हो गया। publicly expose न की गई services के certificates भी बनाए जा सकते हैं, और TLS-01 तरीके की तुलना में orchestration भी बहुत कम चाहिए
DNS provider ठीक हो तो समस्या होने पर भी Let's Encrypt के record validate करने से पहले API error मिलने की संभावना ज्यादा होती है, और failure state Let's Encrypt के check-failure backoff से काफी पहले आ जाती है। अब Traefik, Caddy, Nginx या कोई और reverse proxy इस्तेमाल करूं, Let's Encrypt के लिए लगभग तय कर लिया है कि सिर्फ DNS-01 based validation इस्तेमाल करूंगा, और अगर TLS-01 इस्तेमाल करना ही पड़े तो Staging API से शुरुआत में ही यह जरूर verify करूंगा कि सब सही set हुआ है
वैसे Traefik में Let's Encrypt Staging certificate बना लें तो उस certificate को invalidate करने का कोई अच्छा तरीका नहीं है। certificate हटाने के लिए ACME JSON में बदलाव करना पड़ता है और changes reflect कराने के लिए Traefik restart करना पड़ता है।
SIGHUPसे हो सकता है, लेकिन कोशिश नहीं कीकुल मिलाकर अजीब silent failures और behaviors बहुत हैं, लेकिन सबसे बड़ा दर्द यह है कि dependent service errors को opaque बना देता है
Traefik के बजाय Caddy इस्तेमाल करता हूं। मेरे हिसाब से Traefik के YAML configuration की तुलना में Caddyfile manage करना कहीं आसान है, और local, production, on-premises deployments के लिए अलग-अलग Caddyfile maintain करता हूं
अच्छे plugins भी बहुत हैं, और हम Caddy के लिए coraza WAF plugin इस्तेमाल करते हैं, जो अच्छी तरह काम करता है
जरूरी features सब हैं और यह कहीं ज्यादा simple है
https://github.com/lucaslorentz/caddy-docker-proxy
जैसे external storage इस्तेमाल करते समय local storage को कैसे handle किया जाए। कहा तो जाता है कि इसे stateless माना जा सकता है, लेकिन शायद ऐसा न हो
आखिर में बस यह दुआ करनी पड़ती है कि जिस व्यक्ति ने जरूरी module बनाया है, उसे ठीक से पता हो। क्योंकि उस तरफ भी documentation standard नहीं है। maintainers को ऐसे random modules पर लगाम लगानी चाहिए जो core functionality देते हैं लेकिन documentation शून्य है, जैसे S3 storage backend
अगर जरूरत बस कुछ Docker hosts और कुछ दर्जन containers जितनी साधारण है, तो सोचता हूं कि nginx के बजाय Traefik इस्तेमाल करने की वजह क्या होगी। मैं https://github.com/NginxProxyManager/nginx-proxy-manager इस्तेमाल करता हूं; इतने छोटे scale पर क्या Traefik कोई फायदा देगा?
सच कहूं तो मुझे nginx syntax पसंद नहीं था और Traefik चमकदार लगा, यह भी वजह थी। Let's Encrypt renewal और containers की वजह से इसमें आया, और config करने के तरीके की वजह से इसे इस्तेमाल करता रहा
जब कभी Traefik की कोई ऐसी capability चाहिए हो जो Nginx में न हो, तभी migration पर विचार करूंगा
Certbot हर जगह मौजूद है और ज्यादा scenarios support करता है, ऐसे में automatic Let's Encrypt को selling point बताना भी थोड़ा अजीब लगता है। Traefik और Caddy का selling point यह नहीं है कि वे पहले से व्यापक रूप से supported alternatives से चीजों को ज्यादा आसान बना देते हैं, इसलिए मेरे लिए यह बात बहुत असरदार नहीं है
कुछ हफ्ते पहले reverse proxy चुन रहा था और आखिरकार simplicity की वजह से Caddy चुना। हालांकि Traefik की container auto-discovery और label references काफी अच्छी हैं, और Caddy में भी वही काम करने वाला plugin है
लेख पढ़ा, लेकिन अभी भी मुझे यकीन नहीं है कि मेरे लिए Traefik, Caddy से बेहतर कैसे है। दूसरों के लिए हो सकता है, इसलिए राय सुनना चाहूंगा
यह भी ध्यान देने लायक है कि Traefik default रूप से K3s में configured रहता है। इसी वजह से K3s test के लिए K8s cluster सबसे जल्दी खड़ा करने का तरीका बन गया है, और clusters को cattle की तरह treat करना भी संभव बनाता है
बस deployment और related services को NodePort के रूप में जोड़ दीजिए, और ingress controller की चिंता किए बिना app access कर सकते हैं
मैं shell script से K3s cluster खड़ा करता हूं और जरूरत पड़ने पर positional argument में दिए गए app को test करता हूं। इस दौरान ttl.sh की temporary container registry का इस्तेमाल करता हूं। वही script खत्म होने पर cluster भी हटा देती है
self-hosting के लिए reverse proxy को Traefik पर ले जाने के बारे में सोच रहा हूं। लेखक के उलट, मैं Docker Compose से containerized workloads चलाता हूं, और अभी शानदार caddy-docker-proxy plugin के साथ Caddy इस्तेमाल कर रहा हूं
फिलहाल मुझे Docker label-based config वाला reverse proxy, नए workloads की automatic detection, TLS certificates, और caddy-dynamicdns plugin के जरिए automatic DNS setup मिल रहा है। ISP कोई दूसरा IP दे दे तो भी access खोने की चिंता ज्यादा नहीं करनी पड़ती
लेकिन जब भी नया workload जुड़ता है या restart होता है, पूरा Caddy restart हो जाता है और थोड़ी देर के लिए access टूट जाता है। Caddy मौजूदा connections को नए instance में pass नहीं कर पाता
साथ ही wildcard certificates इस्तेमाल करना पर्याप्त रूप से simple नहीं है। मैं नहीं चाहता कि सभी workloads certificate transparency logs के जरिए दुनिया के सामने आ जाएं, इसलिए wildcard certificate इस्तेमाल करता हूं; लेकिन तब हर hostname के लिए certificate इस्तेमाल करने वाली simple Caddyfile syntax इस्तेमाल नहीं कर सकता। पता है कि Caddy में इस पर काम चल रहा है, पर फिलहाल स्थिति ऐसी ही है
खैर, k8s environment में Traefik इस्तेमाल किया है और वह काफी ठीक लगा, इसलिए personal use के लिए भी एक बार आजमाने का सोच रहा हूं। मेरी इस बात की वजह से कोई Caddy try न करे, ऐसा नहीं होना चाहिए। Caddy भी सच में बहुत अच्छा है
localtest.meको hostnames के साथ इस्तेमाल करने के लिए चलाता हूंएक बार try करने लायक है। दोनों अलग-अलग क्षेत्रों में बेहतरीन हैं
Plugin की असल में जरूरत नहीं है। मेरे पास एक Ansible playbook है जो VM पर यह सब setup करता है और compose file templates तक बनाता है, और एक दूसरी playbook है जो server से data और mounts को छोड़कर बाकी सब हटा देती है। backup के लिए files और कई DB आदि को कई locations पर backup करने वाले custom scripts और restic इस्तेमाल करता हूं
पहले k3s deploy करता था, लेकिन self-hosting के लिए वह बहुत ज्यादा और जटिल है, यह समझ आया। मुझे बस जल्दी deploy करना है और certificates को खुद manage नहीं करना है
अभी local पर check किया और यह ठीक काम करता है
Traefik काफी इस्तेमाल किया है, लेकिन सिर्फ एक reverse proxy रखने के लिए docker-compose labels, layers और ढेर सारी lines से जूझते-जूझते थक गया। फिर Caddy मिला और पीछे मुड़कर नहीं देखा
शायद मैं Traefik का target user नहीं था। मुझे बस HTTPS enabled reverse proxy या basic authentication layer जैसी चीज चाहिए। Caddy में दोनों एक-एक line में हो जाते हैं, बहुत concise है, और ऐसी layers भी नहीं हैं जिन्हें मैं आज तक समझ नहीं पाया
कई सालों से अपनी पूरी self-hosting के लिए Traefik इस्तेमाल कर रहा हूँ
हालांकि dynamic discovery और Docker labels वाले फीचर इतने पेचीदा और debug करने में इतने झुंझलाहट भरे थे कि उन्हें छोड़ दिया
इसके बजाय template engine से static config file generate करता हूँ। लगभग सारी services host/target/port के combination वाली होती हैं, इसलिए संबंधित sections बनाना बहुत आसान है, और TLS handling के अलावा कोई जटिल middleware भी नहीं है। लिंक किए गए लेख के लेखक ने भी शायद यही रास्ता चुना है
config को Ansible script से generate करके उस machine पर copy करता हूँ जहाँ Traefik चल रहा है, और Traefik उस file वाली directory को watch करता है और बदलाव होने पर अपने-आप reload कर लेता है। यह बहुत अच्छे से काम करता आया है
Production में containers के साथ Traefik इस्तेमाल कर रहा हूँ, और इसकी सबसे पसंदीदा बात यह है कि config container labels में रहता है। इसलिए Traefik config को खुद modify करने की जरूरत लगभग नहीं पड़ती
सबसे बड़ा drawback यह पता लगाना है कि नाम को pronounce कैसे करना चाहिए। लगता तो है कि इसे सामान्य traffic की तरह ही पढ़ते हैं, लेकिन बार-बार “trey-feek” जैसा कुछ बोलने का मन करता है
Traefik और Docker Compose का combination छोटे self-hosting setups के लिए, k8s तक बढ़ने से पहले, एक अच्छा sweet spot लगता है—खासकर जब servers की संख्या k8s high-availability control plane द्वारा इस्तेमाल किए जाने वाले servers से भी कम हो
colleagues से मिली तिरछी नजरों और हँसी की मात्रा बहुत ज्यादा थी, और इससे product को अपनाने और इस्तेमाल करने में बाधा आई
हम इसे “tray-feek” कहते थे और वह फिर भी ठीक था, लेकिन official support से बात की तो उन्होंने कहा कि इसे सामान्य “traffic” की तरह ही pronounce करते हैं। इसलिए उस proxy के बारे में बात करते समय हर बार ऐसे वाक्य बनते हैं: “public load balancer पर traffic receive होता है, और traffic की native load balancing traffic को traffic के pod में भेजती है।” यह बेवकूफी जैसा सुनाई देता है, और असल में बेवकूफी ही है
वरना maintenance page, inactive होने के बाद पहली request पर container को start करना जैसे अच्छे काम और आसानी से किए जा सकते थे
इसलिए सोच रहा हूँ कि एक plugin बनाऊँ जो यह जानता हो कि compose files कहाँ रखी हैं और उन्हें वहाँ से सीधे पढ़ सके
aeसबसे ज्यादाyयाhiके करीब है। इसलिए मेरा अनुमान Tryfik है, वरना Trayfik। अगर European-stylefikहो तो feek भी हो सकता है