स्थानीय DNS सर्वर के साथ कई अलग-अलग वीपीएन कनेक्शन

समस्या कहां से आई?


आप में से कई लोग घर से काम करने वाले LAN के लिए वीपीएन कनेक्शन का उपयोग करते हैं।
इसके लिए धन्यवाद, वीपीएन को जोड़ने से आप काम करने वाले नेटवर्क के साथ काम करते हैं "जैसे कि इसमें हो रहा है।"

लिनक्स में एक विशिष्ट सेटअप कैसा दिखता है?
यह /etc/resolv.conf (Openresolv या NetworkManager का उपयोग करके) में लिखा गया है

search local.company.name nameserver 10.0.20.186 

जहां local.company.name कंपनी का डोमेन है, और 10.0.20.186 स्थानीय (कार्यशील नेटवर्क) DNS सर्वर पर स्थानीय का आईपी पता है।

काम कैसा दिखता है?

 root@t510 0 ~ % ping -c 1 cdash-master PING cdash-master.local.company.name (10.0.20.237) 56(84) bytes of data. 64 bytes from 10.0.20.237: icmp_seq=1 ttl=63 time=214 ms ... 

क्या हुआ?
  1. खोज में प्रत्यय जोड़ा गया
  2. उत्पादन नेटवर्क पर DNS सर्वर ने cdash-master.local.company.name को 10.0.20.237 में बदल दिया

जब तक आपके पास वीपीएन कनेक्शन है ... तब तक सब कुछ ठीक रहता है।
मैं दो वीपीएन को एक साथ जोड़ना चाहता था और दो डीएनएस को पंजीकृत करना चाहता था - एक काम करने वाले नेटवर्क के लिए, दूसरा हेट्ज़नर पर स्थानीय नेटवर्क के लिए, जहाँ मेरी वर्चुअल मशीनें घूम रही हैं।

ऐसा लगता है कि यह आसान हो सकता है? हालांकि, समाधान का रास्ता लंबा और घुमावदार था।

विस्तृत परिणाम विवरण


काम करने का नेटवर्क


स्थानीय सबनेट - 10.0.20.0/24 (अर्थात 10.0.20। * - सबनेट से)
डोमेन - * .local.company.name
DNS सर्वर - 10.0.20.186

 ping - 1 somename 

somename को somename.local.company.name के रूप में परिभाषित करना चाहिए, और somename.local.company.name को DNS 10.0.20.186 के माध्यम से IP पते में बदलना चाहिए।

अगर वीपीएन कनेक्शन बंद कर दिया जाता है, तो नाम नहीं मिलेगा।

हेट्ज़नर पर व्यक्तिगत सर्वर


उसके साथ सब कुछ थोड़ा पेचीदा है।

स्थानीय सबनेट - 10.10.10.0/24 (यानी 10.10.10। * - सबनेट से)
डोमेन - * .my.domain
स्थानीय DNS सर्वर - 10.10.10.253

My.domain सर्वर में एक सफेद IP पता होता है और यह बाहर से सुलभ होता है
सर्वर पर nginx है, जो स्थानीय सबनेट से मशीनों के लिए subdomain.my.domain के अनुरोधों को सम्‍मिलित करता है।

एक ओर, यदि कोई उपयोगकर्ता किसी ब्राउज़र के साथ subdomain.my.domain पर जाता है, तो रजिस्ट्रार का DNS सर्वर सफेद IP पते my.domain को लौटा देगा, ब्राउज़र उस IP पते पर एक HTTP अनुरोध भेजेगा, और फिर nxx यह पता लगाएगा कि इसे कहाँ प्रॉक्सी करना है।

दूसरी ओर, वीपीएन चालू होने के साथ, मेरे कनेक्शन फॉर्म के हैं:

 ssh subdomain 

स्थानीय सबनेट से मशीन पर सीधे जाना चाहिए।
क्यों?

मैं बहुत सहज महसूस करता हूं। मैंने एक बार एक कार्य मशीन स्थापित की, और पारदर्शी रूप से कार्य नेटवर्क और व्यक्तिगत नेटवर्क के चारों ओर घूमता रहा। * .My.domain के बाहर, उपयोगकर्ता बिल्कुल एक सर्वर (जो अंशकालिक और वीपीएन है) देखते हैं और स्थानीय मशीनों तक पहुंच नहीं रखते हैं। मैं सीधे कार्यशील नेटवर्क से और व्यक्तिगत एक से दोनों मशीनों के माध्यम से कनेक्ट कर सकता हूं।

"रुको," उपयोगकर्ता मुझे बताएगा।
"मैं बस लिखूंगा /etc/resolv.conf":

 search local.company.name my.domain 

"और सब कुछ काम करेगा।"

नहीं होगा। प्रत्येक क्षेत्र के लिए, local.company.name और my.domain को अपने स्वयं के DNS सर्वर को पंजीकृत करने की आवश्यकता होती है। Resolv.conf के माध्यम से, ओपन्रेसोलव यह समस्या हल नहीं होती है।

निर्णय


मुझे कई घंटों के लिए Google को पीड़ा देना पड़ा और समाधान खोजने के लिए मुझे जो एड्मिनियन पता था।
मेरी पोस्ट आपको समय बचाने के लिए डिज़ाइन की गई है।

तो, सबसे पहले आपको बांधने की आवश्यकता है। मेरे पास आर्क लिनक्स पर एक कार्यशील मशीन है:

 pacman -S bind systemctl enable named 

अगला, कॉन्फ़िगर /etc/onym.conf, वहां जोड़ता है:

 zone "local.company.name" IN { type forward; forwarders { 10.0.20.186; }; }; include "/usr/share/openvpn/named.conf.my.domain"; zone "." IN { type forward; forwarders { 8.8.8.8; 8.8.4.4; }; }; 

हम NetworkManager को कॉन्फ़िगर करते हैं या हम /etc/resolv.conf संपादित करते हैं। दोनों मामलों में परिणाम होना चाहिए:
root @ t510 0 / usr / share / openvpn # cat /etc/resolv.conf

 # Generated by NetworkManager search local.company.name my.domain nameserver 127.0.0.1 

My.domain जोड़ने के लिए Openvpn स्क्रिप्ट में:

 up "/usr/share/openvpn/update-dns-my.domain" down "/usr/share/openvpn/update-dns-my.domain" 

स्क्रिप्ट /usr/share/openvpn/update-dns-my.domain जोड़ें जो बाइंड सेटिंग्स को अपडेट करेगा और वीपीएन कनेक्शन स्थापित करने के बाद इसे पुनः आरंभ करेगा:

 #!/bin/bash set -eu NAME=/usr/share/openvpn/named.conf.my.domain TEMPLATE=${NAME}.template function restart_bind () { /usr/bin/systemctl restart named } case $script_type in up) cat ${TEMPLATE} > ${NAME} restart_bind ;; down) cat /dev/null > ${NAME} restart_bind ;; esac 


/Usr/share/openvpn/onym.conf.my.domain.template जोड़ें
 zone "my.domain" IN { type forward; forwarders { 10.10.10.253; }; }; 

यह कैसे काम करता है?

व्यक्तिगत सर्वर पर वीपीएन कनेक्शन स्थापित करते समय:
  1. Openvpn स्क्रिप्ट /usr/share/openvpn/update-dns-my-domain चलाता है
  2. फ़ाइल में स्क्रिप्ट /usr/share/openvpn/onym.conf.my.domain /usr/share/openvpn/onym.conf.my.domain.template की सामग्री लिखता है
  3. स्क्रिप्ट बाइंड को पुनरारंभ करता है
  4. बाइंड अद्यतन फ़ाइल से my.domain क्षेत्र सेटिंग्स पढ़ता है
  5. my.domain ज़ोन अब DNS सर्वर द्वारा स्थानीय नेटवर्क (वीपीएन के माध्यम से सुलभ) द्वारा हल किया जाता है


वीपीएन कनेक्शन को डिस्कनेक्ट करते समय
  1. Openvpn स्क्रिप्ट /usr/share/openvpn/update-dns-my-domain चलाता है
  2. स्क्रिप्ट /usr/share/openvpn/onym.conf.my.domain की सामग्री को साफ़ करती है
  3. स्क्रिप्ट बाइंड को पुनरारंभ करता है
  4. बाँध अद्यतन फ़ाइल से क्षेत्र सेटिंग्स my.domain पढ़ता है (क्षेत्र के बारे में भूल जाता है)
  5. my.domain ज़ोन अब सार्वजनिक DNS का समाधान करता है


व्यवहार में यह कैसा दिखता है?

 root@t510 0 /usr/share/openvpn # systemctl start named #    bind root@t510 0 /usr/share/openvpn # systemctl start openvpn@waltham #   root@t510 0 /usr/share/openvpn # systemctl start openvpn@hetzner #   root@t510 0 /usr/share/openvpn # ping -c 1 cdash-master PING cdash-master.local.company.name (10.0.20.237) 56(84) bytes of data. 64 bytes from 10.0.20.237: icmp_seq=1 ttl=63 time=214 ms ... root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=233 ms ... root@t510 0 /usr/share/openvpn # systemctl stop openvpn@hetzner root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (white-ip-address) 56(84) bytes of data. 64 bytes from my.domain (white-ip-address): icmp_seq=1 ttl=55 time=124 ms ... root@t510 0 /usr/share/openvpn # systemctl start openvpn@hetzner root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=118 ms ... 

यह मज़ेदार है कि इतना सरल व्यवहार पाने के लिए मुझे इतना काम करना पड़ा।

Source: https://habr.com/ru/post/In182924/


All Articles