सक्रिय OpenVPN क्लाइंट के साथ सर्वर पर SSH की अनुमति देना


15

मेरे पास एक VPS चल रहा है CentOS 7 जिसे मैं SSH के साथ जोड़ता हूं। मैं वीपीएस पर एक ओपनवीपीएन क्लाइंट चलाना चाहता हूं ताकि वीपीएन के माध्यम से इंटरनेट ट्रैफ़िक को रूट किया जाए, लेकिन फिर भी मुझे एसएसएच के माध्यम से सर्वर से कनेक्ट करने की अनुमति मिलती है। जब मैं ओपनवीपीएन शुरू करता हूं, तो मेरा एसएसएच सत्र समाप्त हो जाता है और मैं अपने वीपीएस से जुड़ नहीं सकता। आने वाले SSH (पोर्ट 22) कनेक्शन को VPS के वास्तविक IP (104.167.102.77) पर खोलने की अनुमति देने के लिए मैं VPS को कैसे कॉन्फ़िगर कर सकता हूं, लेकिन फिर भी वीपीएन के माध्यम से आउटगोइंग ट्रैफ़िक (जैसे VPS पर वेब ब्राउज़र से) को रूट किया जा सकता है?

OpenVPN सेवा का उपयोग मैं PrivateInternetAccess, और एक उदाहरण config.ovpn फ़ाइल है।

ग्राहक
देव तुन
प्रोटो udp
दूरस्थ nl.pStreetinternetaccess.com 1194
resolv-retry अनंत
nobind
जारी रहती है कुंजी
जारी रहती है-tun
ca। ca
TLS-ग्राहक
रिमोट-सर्टिफिकेट- tls सर्वर
Auth-उपयोगकर्ता के पास
कंप्यूटर अनुप्रयोग-lzo
क्रिया १
पाखण्डी-से ०
crl- सत्यापित crl.pem

VPS का आईपी एड्र:

1: lo: mtu 65536 qdisc noqueue राज्य UNKNOWN
    लिंक / लूपबैक 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 स्कोप होस्ट लो
       valid_lft हमेशा के लिए पसंद_lft हमेशा के लिए
    inet6 :: 1/128 स्कोप होस्ट
       valid_lft हमेशा के लिए पसंद_lft हमेशा के लिए
2: ens33: mtu 1500 qdisc pfifo_fast राज्य UP qlen 1000
    लिंक / ईथर ००: ५०: ५६: होना: १६: एफ f डी एफडी एफएफ: एफएफ: एफएफ: एफएफ: एफएफ: एफएफ
    inet 104.167.102.77/24 brd 104.167.102.255 स्कोप वैश्विक ens33
       valid_lft हमेशा के लिए पसंद_lft हमेशा के लिए
    inet6 fe80 :: 250: 56ff: febe: 16f7 / 64 गुंजाइश लिंक
       valid_lft हमेशा के लिए पसंद_lft हमेशा के लिए
4: tun0: mtu 1500 qdisc pfifo_fast स्थिति UNKNOWN qlen 100
    लिंक / कोई भी
    inet 10.172.1.6 पीयर 10.172.1.5/32 स्कोप ग्लोबल ट्यून
       valid_lft हमेशा के लिए पसंद_lft हमेशा के लिए

VPS का आईपी मार्ग:

0.0.0.0/1 के माध्यम से 10.172.1.5 देव ट्यून
डिफ़ॉल्ट रूप से 104.167.102.1 dev ens33 proto static metric 1024 है
10.172.1.1 के माध्यम से 10.172.1.5 देव तुन
10.172.1.5 देव टुन 0 प्रोटो कर्नेल स्कोप लिंक src 10.172.1.6
104.167.102.0/24 देव ens33 प्रोटो कर्नेल स्कोप लिंक src 104.167.102.77
109.201.154.177 104.167.102.1 देव दास 33 के माध्यम से
128.0.0.0/1 के माध्यम से 10.172.1.5 देव ट्यून

जवाबों:


16

मैं इस के लिए एक समान मुद्दा रहा हूँ और इस मंच पोस्ट में वर्णित तय करने का प्रयास किया गया है ।

विचार यह है कि वर्तमान में जब आप अपने सार्वजनिक आईपी पते से जुड़ते हैं, तो वीपीएन पर रिटर्न पैकेट को रूट किया जाता है। आपको इन पैकेटों को अपने सार्वजनिक इंटरफ़ेस पर रूट करने के लिए बाध्य करने की आवश्यकता है।

ये मार्ग कमांड उम्मीद करेंगे कि चाल:

आईपी ​​नियम xxxx तालिका 128 से जोड़ें

आईपी ​​मार्ग yyyy / y देव एथिक्स के लिए तालिका 128 जोड़ते हैं

आईपी ​​मार्ग zzzz के माध्यम से तालिका 128 डिफ़ॉल्ट जोड़ें

जहां xxxx आपका सार्वजनिक आईपी है, yyyy / y आपके सार्वजनिक आईपी पते का सबनेट होना चाहिए, एथिक्स आपका सार्वजनिक ईथरनेट इंटरफ़ेस होना चाहिए, और zzzz डिफ़ॉल्ट गेटवे होना चाहिए।

ध्यान दें कि यह मेरे लिए काम नहीं किया है (डेबियन और PrivateInternetAccess का उपयोग करके) लेकिन आपकी मदद कर सकता है।


1
केवल एक समाधान से जोड़ने के बजाय, कृपया राज्य को हल करें या कम से कम यहाँ समाधान का सारांश दें। इस तरह, आपकी पोस्ट भविष्य में भी उपयोगी हो सकती है यदि आप जिस पोस्ट से जुड़े हैं वह दूर चली जाती है।
एंड्रयू शुलमैन

मैं कोई लाभ नहीं हुआ इन आदेशों को चलाने की है ... कैसे मैं तो इस तालिका (मैं नए नियमों मैं के साथ जोड़ा नहीं देख सकते सूची जाएगा routeया ip route show) है और यह हटाना चाहते हैं?
हुसैन खलील

जब मैंने अपने होम सर्वर पर Openvpn को खड़ा किया तो मैंने अपने सार्वजनिक आईपी पर अपना ssh खो दिया। ऊपर सूचीबद्ध पहले कमांड को चलाने से मुझे होम लैन पर नहीं होने पर सर्वर में वापस पहुंच प्राप्त करने की अनुमति मिलती है। PIA + OpenVPN + ubuntu 16.04 का उपयोग करना।
बोरिंगकोडिंग

क्या यह वास्तव में केवल SSH पोर्ट को मेरे सार्वजनिक IP में रूट करता है? क्या आप इसके बारे में अधिक बता सकते हैं कि यह वास्तव में क्या करता है? मैं कहीं नहीं देखता कि आप एक विशिष्ट पोर्ट या प्रोटोकॉल सेट कर रहे हैं
फ्रीडो

यह पोर्ट के आधार पर बिल्कुल भी रूट नहीं करता है (128 टेबल नंबर है, पोर्ट नहीं है)। यह मूल रूप से कह रहा है कि यदि पैकेट आपके सार्वजनिक आईपी पते के माध्यम से आते हैं, तो प्रतिक्रिया को उसी इंटरफ़ेस (वीपीएन का उपयोग किए बिना) पर भेजा जाना चाहिए।
MrK

17

यह थोड़ी देर हो सकती है, लेकिन ...

समस्या यह है कि OpenVPN द्वारा डिफ़ॉल्ट गेटवे बदल जाता है, और जब तक आप OpenVPN शुरू नहीं करते हैं, तब तक आपके वर्तमान SSH कनेक्शन को तोड़ देता है।

जो मेरे लिए काम करता है। यह iptables और ip (iproute2) का उपयोग करता है। नीचे, यह माना जाता है कि OpenVPN शुरू होने से पहले डिफ़ॉल्ट गेटवे इंटरफ़ेस "eth0" है। विचार यह सुनिश्चित करने के लिए है कि जब eth0 का कनेक्शन बनाया जाता है, भले ही eth0 अब डिफ़ॉल्ट गेटवे इंटरफ़ेस नहीं है, कनेक्शन के लिए प्रतिक्रिया पैकेट फिर से eth0 पर वापस जाते हैं।

आप कनेक्शन मार्क, फ़ायरवॉल मार्क और राउटिंग टेबल के लिए एक ही नंबर का उपयोग कर सकते हैं। मैंने उनके बीच के अंतर को अधिक स्पष्ट बनाने के लिए अलग-अलग संख्याओं का उपयोग किया।

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

अपडेट करें:

ऊपर डेबियन जेसी पर मेरे लिए ठीक काम करता है। लेकिन पुराने व्हीज़ी सिस्टम पर मैंने अभी-अभी पाया है कि मुझे रूटिंग टेबल एंट्री के माध्यम से "जोड़ने" की आवश्यकता है:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

"12.345.67.89" मूल गैर-वीपीएन गेटवे होना चाहिए।


1
धन्यवाद! मैं दिनों से इस समस्या का हल ढूंढ रहा हूं, और आपके जवाब ने इसे मेरे लिए हल कर दिया है। यह स्वीकृत उत्तर होना चाहिए।
माइक टरली

इस समाधान ने भी मेरे लिए काम किया। इसे साझा करने के लिए बहुत - बहुत धन्यवाद।
एलेकोव

क्या एक ही गंतव्य ( ip route add default) के साथ मार्ग तालिका में दो मार्ग हो सकते हैं ? मुझे "RTNETLINK उत्तर: फ़ाइल मौजूद है"। मैं Ubuntu Xenial चला रहा हूं। "के माध्यम से" मदद नहीं करता है। मैंने अभी इसे आर्क लिनक्स पर आज़माया है, पहले ip route add defaultसफल होता हूँ, लेकिन ip routeआउटपुट नहीं बदलता है। किसी भी बाद के रन परिणाम "फ़ाइल में मौजूद है" संदेश।
x-yuri

मैं देखता हूं, मार्ग को 3412 राउटिंग टेबल में जोड़ा गया है। और इसे पाने के लिए आपको मिल गया है ip route show table all | grep 3412:। और बिना "गैर-स्थापित" (अगर मैं गलत नहीं हूं) के बिना कनेक्शन काम करना बंद कर देता है (उबंटू ज़ेनियल)। कम से कम मैं रूटिंग टेबल को सही करने में सक्षम हूं। लेकिन फिर भी, मैं चलाने के बाद सर्वर तक नहीं पहुँच सकता openvpn
x- यूरी

के रूप में करने का विरोध किया, किसी कारण से मेरे लिए काम नहीं किया था यह , या यह , या यह । जो मूल रूप से एक ही हैं।
x- यूरी

14

@MrK उत्तर के आधार पर, मैंने यहां कुछ सरल कोड लिखे हैं ताकि यह काम जल्दी कर सके ताकि आपको इंटरफेस / आईपी के लिए जांच न करनी पड़े:

ip rule add from $(ip route get 1 | grep -Po '(?<=src )(\S+)') table 128
ip route add table 128 to $(ip route get 1 | grep -Po '(?<=src )(\S+)')/32 dev $(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)')
ip route add table 128 default via $(ip -4 route ls | grep default | grep -Po '(?<=via )(\S+)')

मैंने अपने VPS के 4 पर इस स्क्रिप्ट की कोशिश की है और यह पूरी तरह से काम कर रहा है।


आपको बहुत - बहुत धन्यवाद!
जॉर्डन गोयन्स 15

0

हम्म, आईपी सबनेट ओवरलैप की तरह लगता है .... आपकी आईपी योजना के बारे में अधिक जाने बिना, आपके वीपीएन टर्नमेशन के लिए पब्लिक आईपी के अलावा अन्य भी।

उदाहरण के लिए, अगर nl.pStreetinternetaccess.com के दूसरी तरफ रिमोट सबनेट 10.32.43.0/24 है, और आपका उदाहरण एक anws vpc में है जिसका सबनेट 10.32.44.0/24 है। लेकिन आपका स्रोत ssh क्लाइंट 10.32.43.0/24 (aws vpc का आपका पक्ष) पर रहता है, यह काम नहीं करेगा, क्योंकि रिटर्न ssh ट्रैफ़िक को गलत तरीके से vpn से netherland पर धकेल दिया जाएगा।

इसके साथ अधिक मदद के लिए पूर्ण आईपी / सबनेट जानकारी प्रदान करें।

...

ठीक है, तो ... ऐसा लगता है कि आपका डिफ़ॉल्ट मार्ग सुरंग में है, जब आप nl से कनेक्ट करते हैं:

0.0.0.0/1 के माध्यम से 10.172.1.5 देव ट्यून

इसलिए आप कनेक्ट करने के बाद उसे बदल सकते हैं। कई बार वीपीएन सर्वर आपको फर्जी रूट देते हैं। विशेष रूप से मैला लाशों पर। इस मामले में, वे आपके लिए एक डिफ़ॉल्ट मार्ग पर जोर दे रहे हैं ताकि vps बॉक्स से सभी ट्रैफ़िक nl पर जा रहा हो। डिफ़ॉल्ट मार्ग को 104.167.102.x पर या जो भी सबनेट गेटवे उर वीपीएस प्रदाता पर है, बदल दें।


कमांड के आउटपुट क्या पर्याप्त होंगे?
ओडी ५५३३

1
ssh क्लाइंट, ssh सर्वर / vpn क्लाइंट, और nl vpn सर्वर पर "ip addr" और "ip रूट" का आउटपुट। सुनिश्चित करें कि वीपीएन उठ रहा है जब उत्पादन हो रहा है।
nandoP

मुझे वीपीएन के माध्यम से जाने के लिए डिफ़ॉल्ट रूप से ट्रैफ़िक चाहिए; हालाँकि, मैं चाहता हूं कि आने वाला ट्रैफ़िक 104.167.102.77:22 को अनुमति दी जाए ताकि मैं SSH से VPS कर सकूं।
ओडी ५५३३

आप इसे tcpdump के साथ सत्यापित करते हैं, लेकिन ऐसा लगता है कि आपके कनेक्ट होने के बाद, और डिफ़ॉल्ट मार्ग सुरंग बन गया है, इंटरनेट पर कहीं और से नया ssh ट्रैफ़िक अंदर आने की अनुमति है, लेकिन यह वापस नहीं आ रहा है, क्योंकि डिफ़ॉल्ट मार्ग ssh प्रतिसाद सुरंग भेजता है, आप के बजाय वापस करने के लिए। आप इसे "आईपी मार्ग जोड़ [अपना-आईपी-जोड़] / 32 के माध्यम से [अपने वीपीएस गेटवे]" से ठीक कर सकते हैं। अपना vps गेटवे खोजने के लिए, बस सुरंग से डिस्कनेक्ट करें, और डिफ़ॉल्ट मार्ग देखें
nandoP

0

जब आप वीपीएन लाते हैं, तो आपका डिफ़ॉल्ट गेटवे बदल दिया जाता है। इसका मतलब है कि आपके बॉक्स के माध्यम से उत्पन्न या रूट किए गए किसी भी ट्रैफ़िक को वीपीएन गेटवे पर भेजा जाएगा।

एक सरल उपाय सभी ट्रैफ़िक को फ़िल्टर करना है जिसे आप वीपीएन के माध्यम से रूट नहीं करना चाहते हैं और इसके साथ कुछ और करते हैं। एक संभावना यह है कि आपके बॉक्स से उत्पन्न ट्रैफ़िक को आपके स्थानीय स्रोत पते के साथ उठाया जाए और इसे आपके स्थानीय गेटवे के माध्यम से रूट किया जाए। यह एसएसएच जैसी सेवाओं को ठीक से काम करने की अनुमति देता है।

हम यहां करेंगे। सबसे पहले, एक नया रूटिंग टेबल बनाएं और एक डिफ़ॉल्ट मार्ग जोड़ें जो आपके स्थानीय गेटवे के माध्यम से सब कुछ रूट करता है:

# <table> is any number between 2 and 252.
# Check /etc/iproute2/rt_tables for more info.
ip route add default via <gateway> table <table>
ip route add <lan-addr> dev <device> table <table>

अगला, एक नया पैकेट फ़िल्टर नियम बनाएं जो किसी पहचानकर्ता के साथ दिए गए स्रोत पते से आपके बॉक्स को छोड़ने वाले सभी ट्रैफ़िक को चिह्नित करता है।

# <mark> is any number.
iptables -tmangle -AOUTPUT -s<local-addr> -jMARK --set-mark <mark>

अंत में, एक रूटिंग नीति बनाएं जो उपरोक्त सभी ट्रैफ़िक को चिह्नित करता है और ऊपर उत्पन्न तालिका का उपयोग करके इसे रूट करता है।

ip rule add fwmark <mark> table <table>

एक बार फिर, मूल्यों <mark>और <table>अपनी खुद की पसंद के मनमानी पहचानकर्ता हैं।


0

मेरे लिए pfSense में OpenVPN सर्वर चलाने के साथ ही टनल के माध्यम से सभी क्लाइंट-जनरेटेड IPv4 ट्रैफ़िक को सेट करने के लिए अनचेक करना था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.