केवल एक विशिष्ट नेटवर्क नेमस्पेस के लिए OpenVPN के माध्यम से सभी ट्रैफ़िक फ़ीड करें


16

मैं एक वीपीएन (ओपनवीपीएन का उपयोग करके) स्थापित करने का प्रयास कर रहा हूं, ताकि सभी ट्रैफ़िक और केवल विशिष्ट प्रक्रियाओं से / वीपीएन के माध्यम से आवागमन हो सके; अन्य प्रक्रियाओं को सीधे भौतिक उपकरण का उपयोग करना जारी रखना चाहिए। यह मेरी समझ है कि लिनक्स में ऐसा करने का तरीका नेटवर्क नेमस्पेस के साथ है।

अगर मैं सामान्य रूप से OpenVPN का उपयोग करता हूं (यानी वीपीएन के माध्यम से क्लाइंट से सभी ट्रैफ़िक को फ़नल करना), तो यह ठीक काम करता है। विशेष रूप से, मैं इस तरह से OpenVPN शुरू करता हूं:

# openvpn --config destination.ovpn --auth-user-pass credentials.txt

(इस प्रश्न के अंत में गन्तव्य का एक नया संस्करण है।

मैं अगले कदम पर अटक गया हूं, स्क्रिप्ट लिख रहा हूं जो सुरंग डिवाइस को नामस्थानों तक सीमित करता है। मैंने कोशिश की है:

  1. सुरंग डिवाइस को सीधे नाम स्थान में रखकर

    # ip netns add tns0
    # ip link set dev tun0 netns tns0
    # ip netns exec tns0 ( ... commands to bring up tun0 as usual ... )
    

    ये आदेश सफलतापूर्वक निष्पादित होते हैं, लेकिन नेमस्पेस (जैसे कि ip netns exec tns0 traceroute -n 8.8.8.8) के अंदर उत्पन्न ट्रैफ़िक एक ब्लैक होल में गिर जाता है।

  2. इस धारणा पर कि " आप [अभी भी] केवल एक नेटवर्क नेमस्पेस को वर्चुअल ईथरनेट (वीएचटी) इंटरफेस प्रदान कर सकते हैं " (जो कि, अगर सच है, तो इस साल का पुरस्कार सबसे हास्यास्पद अनावश्यक एपीआई प्रतिबंध के लिए लेता है), एक वीथ जोड़ी और एक पुल बना रहा है, और नेपथ्य में वेथ की जोड़ी का एक सिरा। यह मंजिल पर यातायात छोड़ने के रूप में भी नहीं मिलता है: यह मुझे पुल में सुरंग डालने की अनुमति नहीं देगा! [संपादित करें: यह प्रतीत होता है क्योंकि केवल नल उपकरणों को पुलों में डाला जा सकता है। मनमाने ढंग से डिवाइस को नेटवर्क नेमस्पेस में डालने में असमर्थता के विपरीत, यह वास्तव में समझ में आता है कि पुलों के साथ ईथरनेट-लेयर कॉन्सेप्ट क्या है; दुर्भाग्य से, मेरा वीपीएन प्रदाता टैप मोड में ओपनवीपीएन का समर्थन नहीं करता है, इसलिए मुझे वर्कअराउंड की आवश्यकता है।]

    # ip addr add dev tun0 local 0.0.0.0/0 scope link
    # ip link set tun0 up
    # ip link add name teo0 type veth peer name tei0
    # ip link set teo0 up
    # brctl addbr tbr0
    # brctl addif tbr0 teo0
    # brctl addif tbr0 tun0
    can't add tun0 to bridge tbr0: Invalid argument
    

इस सवाल के अंत में स्क्रिप्ट वीथ दृष्टिकोण के लिए हैं। डायरेक्ट एप्रोच की स्क्रिप्ट्स एडिट हिस्ट्री में मिल सकती हैं। स्क्रिप्ट में चर जो उन्हें पहले सेट किए बिना उपयोग किए जाने वाले दिखाई देते हैं, उन्हें openvpnप्रोग्राम द्वारा वातावरण में सेट किया जाता है - हां, यह मैला है और लोअरकेस नामों का उपयोग करता है।

कृपया इसे कैसे प्राप्त करें, इस पर विशेष सलाह दें। मैं इस बात से परिचित हूं कि मैं कार्गो पंथ द्वारा प्रोग्रामिंग कर रहा हूं - क्या किसी ने इस सामान के लिए व्यापक दस्तावेज लिखा है? मुझे कोई भी - स्क्रिप्ट की सामान्य कोड समीक्षा की सराहना नहीं मिल रही है।

मामले में यह मायने रखता है:

# uname -srvm
Linux 3.14.5-x86_64-linode42 #1 SMP Thu Jun 5 15:22:13 EDT 2014 x86_64
# openvpn --version | head -1
OpenVPN 2.3.2 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Mar 17 2014
# ip -V
ip utility, iproute2-ss140804
# brctl --version
bridge-utils, 1.5

गिरी मेरी आभासी होस्टिंग प्रदाता (द्वारा बनाया गया था linode ) और है, हालांकि साथ संकलित CONFIG_MODULES=y, कोई वास्तविक मॉड्यूल है - केवल CONFIG_*करने के लिए चर सेट mके अनुसार /proc/config.gzथा CONFIG_XEN_TMEM, और मैं वास्तव में नहीं है है कि मॉड्यूल (कर्नेल मेरी फाइल सिस्टम के बाहर जमा हो जाती है; /lib/modulesखाली है, और /proc/modulesइंगित करता है कि यह जादुई रूप से किसी तरह लोड नहीं हुआ था)। /proc/config.gzअनुरोध पर उपलब्ध कराए गए अंश , लेकिन मैं यहां पूरी बात नहीं बताना चाहता।

netns-up.sh

#! /bin/sh

mask2cidr () {
    local nbits dec
    nbits=0
    for dec in $(echo $1 | sed 's/\./ /g') ; do
        case "$dec" in
            (255) nbits=$(($nbits + 8)) ;;
            (254) nbits=$(($nbits + 7)) ;;
            (252) nbits=$(($nbits + 6)) ;;
            (248) nbits=$(($nbits + 5)) ;;
            (240) nbits=$(($nbits + 4)) ;;
            (224) nbits=$(($nbits + 3)) ;;
            (192) nbits=$(($nbits + 2)) ;;
            (128) nbits=$(($nbits + 1)) ;;
            (0)   ;;
            (*) echo "Error: $dec is not a valid netmask component" >&2
                exit 1
                ;;
        esac
    done
    echo "$nbits"
}

mask2network () {
    local host mask h m result
    host="$1."
    mask="$2."
    result=""
    while [ -n "$host" ]; do
        h="${host%%.*}"
        m="${mask%%.*}"
        host="${host#*.}"
        mask="${mask#*.}"
        result="$result.$(($h & $m))"
    done
    echo "${result#.}"
}

maybe_config_dns () {
    local n option servers
    n=1
    servers=""
    while [ $n -lt 100 ]; do
       eval option="\$foreign_option_$n"
       [ -n "$option" ] || break
       case "$option" in
           (*DNS*)
               set -- $option
               servers="$servers
nameserver $3"
               ;;
           (*) ;;
       esac
       n=$(($n + 1))
    done
    if [ -n "$servers" ]; then
        cat > /etc/netns/$tun_netns/resolv.conf <<EOF
# name servers for $tun_netns
$servers
EOF
    fi
}

config_inside_netns () {
    local ifconfig_cidr ifconfig_network

    ifconfig_cidr=$(mask2cidr $ifconfig_netmask)
    ifconfig_network=$(mask2network $ifconfig_local $ifconfig_netmask)

    ip link set dev lo up

    ip addr add dev $tun_vethI \
        local $ifconfig_local/$ifconfig_cidr \
        broadcast $ifconfig_broadcast \
        scope link
    ip route add default via $route_vpn_gateway dev $tun_vethI
    ip link set dev $tun_vethI mtu $tun_mtu up
}

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

set -ex

# For no good reason, we can't just put the tunnel device in the
# subsidiary namespace; we have to create a "virtual Ethernet"
# device pair, put one of its ends in the subsidiary namespace,
# and put the other end in a "bridge" with the tunnel device.

tun_tundv=$dev
tun_netns=tns${dev#tun}
tun_bridg=tbr${dev#tun}
tun_vethI=tei${dev#tun}
tun_vethO=teo${dev#tun}

case "$tun_netns" in
     (tns[0-9] | tns[0-9][0-9] | tns[0-9][0-9][0-9]) ;;
     (*) exit 1;;
esac

if [ $# -eq 1 ] && [ $1 = "INSIDE_NETNS" ]; then
    [ $(ip netns identify $$) = $tun_netns ] || exit 1
    config_inside_netns
else

    trap "rm -rf /etc/netns/$tun_netns ||:
          ip netns del $tun_netns      ||:
          ip link del $tun_vethO       ||:
          ip link set $tun_tundv down  ||:
          brctl delbr $tun_bridg       ||:
         " 0

    mkdir /etc/netns/$tun_netns
    maybe_config_dns

    ip addr add dev $tun_tundv local 0.0.0.0/0 scope link
    ip link set $tun_tundv mtu $tun_mtu up

    ip link add name $tun_vethO type veth peer name $tun_vethI
    ip link set $tun_vethO mtu $tun_mtu up

    brctl addbr $tun_bridg
    brctl setfd $tun_bridg 0
    #brctl sethello $tun_bridg 0
    brctl stp $tun_bridg off

    brctl addif $tun_bridg $tun_vethO
    brctl addif $tun_bridg $tun_tundv
    ip link set $tun_bridg up

    ip netns add $tun_netns
    ip link set dev $tun_vethI netns $tun_netns
    ip netns exec $tun_netns $0 INSIDE_NETNS

    trap "" 0
fi

netns-down.sh

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

set -ex

tun_netns=tns${dev#tun}
tun_bridg=tbr${dev#tun}

case "$tun_netns" in
     (tns[0-9] | tns[0-9][0-9] | tns[0-9][0-9][0-9]) ;;
     (*) exit 1;;
esac

[ -d /etc/netns/$tun_netns ] || exit 1

pids=$(ip netns pids $tun_netns)
if [ -n "$pids" ]; then
    kill $pids
    sleep 5
    pids=$(ip netns pids $tun_netns)
    if [ -n "$pids" ]; then
        kill -9 $pids
    fi
fi

# this automatically cleans up the the routes and the veth device pair
ip netns delete "$tun_netns"
rm -rf /etc/netns/$tun_netns

# the bridge and the tunnel device must be torn down separately
ip link set $dev down
brctl delbr $tun_bridg

destination.ovpn

client
auth-user-pass
ping 5
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
verb 3
route-metric 1
proto tcp
ping-exit 90
remote [REDACTED]
<ca>
[REDACTED]
</ca>
<cert>
[REDACTED]
</cert>
<key>
[REDACTED]
</key>

आइए स्पष्ट से शुरू करें: क्या वीथ डिवाइस समर्थित हैं? कर्नेल मॉड्यूल (वेथ) लोड किए गए हैं?
काउंटरमोड

@countermode grep veth /proc/modulesकुछ भी नहीं सूचीबद्ध करता है, लेकिन मुझे नहीं पता कि क्या यह निर्णायक है। Linode उदाहरणों में OS विभाजन के अंदर कर्नेल स्थापित नहीं होता है, इसलिए मुझे यकीन नहीं है कि मैं किसी भी तरह एक लापता मॉड्यूल लोड कर सकता हूं।
zwol

क्या lsmodकिसी भी उत्पादन का उत्पादन करता है ? क्या कोई निर्देशिका है /lib/modules?
काउंटरमॉड

lsmod: command not found। एक है /lib/modules, लेकिन इसमें कोई मॉड्यूल नहीं है , बस प्रति-कर्नेल निर्देशिकाओं का एक गुच्छा जिसमें खाली modules.depफाइलें हैं। मैं लिनोड-विशिष्ट सहायता में चारों ओर प्रहार करूंगा और पता लगाऊंगा कि यह कैसा होना चाहिए।
zwol

हम्म ... बहुत अजीब है। मैं Linode से परिचित नहीं हूँ, लेकिन मेरे लिए ऐसा लगता है जैसे कि वेथ डिवाइस समर्थित नहीं हैं।
काउंटरमैड

जवाबों:


9

आप OpenVPN लिंक को किसी नामस्थान के अंदर प्रारंभ कर सकते हैं और फिर प्रत्येक कमांड को चला सकते हैं जिसे आप OpenVPN लिंक नामस्थान के अंदर उपयोग करना चाहते हैं। यह कैसे करें (मेरे काम नहीं) पर विवरण यहाँ है:

http://www.naju.se/articles/openvpn-netns.html

मैंने इसकी कोशिश की और यह काम करता है; यह विचार वैश्विक के बजाय एक विशिष्ट नाम स्थान के अंदर ओपनवीपीएन कनेक्शन के अप और रूट-अप चरणों को पूरा करने के लिए एक कस्टम स्क्रिप्ट प्रदान करने के लिए है। मैं भविष्य में ऑफ़लाइन होने की स्थिति में उपरोक्त लिंक से उद्धृत करता हूं:

सबसे पहले OpenVPN के लिए एक --up स्क्रिप्ट बनाएं। यह स्क्रिप्ट डिफ़ॉल्ट नाम स्थान के बजाय वीपीएन नामक एक नेटवर्क नेमस्पेस के अंदर वीपीएन टनल इंटरफेस बनाएगी।

$ cat > netns-up << EOF
#!/bin/sh
case $script_type in
        up)
                ip netns add vpn
                ip netns exec vpn ip link set dev lo up
                mkdir -p /etc/netns/vpn
                echo "nameserver 8.8.8.8" > /etc/netns/vpn/resolv.conf
                ip link set dev "$1" up netns vpn mtu "$2"
                ip netns exec vpn ip addr add dev "$1" \
                        "$4/${ifconfig_netmask:-30}" \
                        ${ifconfig_broadcast:+broadcast "$ifconfig_broadcast"}
                test -n "$ifconfig_ipv6_local" && \
          ip netns exec vpn ip addr add dev "$1" \
                        "$ifconfig_ipv6_local"/112
                ;;
        route-up)
                ip netns exec vpn ip route add default via "$route_vpn_gateway"
                test -n "$ifconfig_ipv6_remote" && \
          ip netns exec vpn ip route add default via \
                        "$ifconfig_ipv6_remote"
                ;;
        down)
                ip netns delete vpn
                ;;
esac
EOF

फिर OpenVPN शुरू करें और इसे ifconfig और मार्ग निष्पादित करने के बजाय हमारी --up स्क्रिप्ट का उपयोग करने के लिए कहें।

openvpn --ifconfig-noexec --route-noexec --up netns-up --route-up netns-up --down netns-up

अब आप इस तरह सुरंग बनाने के लिए कार्यक्रम शुरू कर सकते हैं:

ip netns exec vpn command

एकमात्र पकड़ यह है कि आपको आह्वान करने के लिए रूट होने की आवश्यकता है ip netns exec ...और शायद आप नहीं चाहते कि आपका आवेदन रूट के रूप में चले। समाधान सरल है:

sudo ip netns vpn sudo -u $ (whoami) कमांड निष्पादित करते हैं

1
नमस्कार और साइट पर आपका स्वागत है! हम उपयोगकर्ताओं को कम से कम संक्षेप में (यदि संभव हो तो) लिंक की सामग्रियों को उत्तर में पेस्ट करने के लिए प्रोत्साहित करते हैं। यह उत्तर गुणवत्ता को बनाए रखने में मदद करता है, जब लिंक बासी हो जाता है (जैसे साइट अब सुलभ नहीं है)। कृपया जुड़े हुए लेख से सबसे महत्वपूर्ण भागों / निर्देशों को शामिल करके अपने उत्तर में सुधार करें।
एराथिल

यह बहुत अच्छा है लेकिन आपको शेल को सभी चर के विस्तार से रोकने के लिए उद्घाटन heredoc सीमांकक के आसपास एकल उद्धरण लगाने की आवश्यकता है।
इविट

7

यह पता चला है कि आप एक नेटवर्क नेमस्पेस में एक सुरंग इंटरफ़ेस डाल सकते हैं । इंटरफ़ेस को लाने में मेरी पूरी समस्या एक गलती थी:

ip addr add dev $tun_tundv \
    local $ifconfig_local/$ifconfig_cidr \
    broadcast $ifconfig_broadcast \
    scope link

समस्या "स्कोप लिंक" है, जिसे मैंने केवल रूटिंग को प्रभावित करने के रूप में गलत समझा। यह कर्नेल को सुरंग में भेजे गए सभी पैकेटों के स्रोत पते को सेट करने का कारण बनता है 0.0.0.0; मुमकिन है कि OpenVPN सर्वर RFC1122 के अनुसार उन्हें अमान्य कर देगा; यहां तक ​​कि अगर यह नहीं था, तो गंतव्य स्पष्ट रूप से उत्तर देने में असमर्थ होगा।

नेटवर्क नेमस्पेस की अनुपस्थिति में सब कुछ सही ढंग से काम करता था क्योंकि ओपनवीपीएन के अंतर्निहित नेटवर्क कॉन्फ़िगरेशन स्क्रिप्ट ने यह गलती नहीं की थी। और "गुंजाइश लिंक" के बिना, मेरी मूल स्क्रिप्ट भी काम करती है।

(मुझे यह कैसे पता चला, आप पूछते हैं? straceओपनवीपीएन प्रक्रिया पर चलने से, सुरंग विवरणक से पढ़ी गई हर चीज को हेक्सडंप पर सेट करें और फिर पैकेट हेडर को मैन्युअल रूप से डिकोड करें।)


किसी भी मौका आप इस पर एक गाइड लिख सकते हैं? मैं कुछ समान स्थापित करने की कोशिश कर रहा हूं, लेकिन यह बताना कठिन है कि आपके प्रश्न के कौन से हिस्से शुरू करने के लिए अच्छे हैं और कौन से रास्ते हैं जो असफलता का कारण बने।
कंपकंपी

@tremby मुझे निकट भविष्य में ऐसा करने की संभावना नहीं है, लेकिन आपको github.com/zackw/tbbscraper/blob/master/scripts/openvpn-netns उपयोगी मिल सकता है।
zwol

येश, मुझे यकीन नहीं है कि 1100-लाइन सी कार्यक्रम मदद करने वाला है। कैसे के बारे में सिर्फ अंतिम विन्यास, स्क्रिप्ट और incantations जो आप के लिए काम किया है? ... या यह है कि सी इस कार्यक्रम के अपने अंतिम कार्यान्वयन?
कंपकंपी

@tremby हां, वह सी प्रोग्राम मेरा अंतिम कार्यान्वयन है। (मेरे उपयोग के परिदृश्य में इसे सेट किया जाना है, आप देखें।) आप बस इस चीज़ को छोड़ने में सक्षम हो सकते हैं - यदि शीर्ष पर बड़ी टिप्पणी यह ​​नहीं बताती है कि इसका उपयोग कैसे करना है, तो मुझे बताएं।
zwol

@tremby विकल्प में, "Openvpn के अंदर से निष्पादित स्क्रिप्ट्स" को देखें, github.com/zackw/tbbscraper/blob/master/scripts/… पर शुरू करते हुए , यह देखने के लिए कि नेटवर्क नेमस्पेस कैसे सेट अप और फाड़ा है; और ovpn ग्राहक का वास्तविक आह्वान github.com/zackw/tbbscraper/blob/master/scripts/… पर है । कोड के शेष को उन कार्यों को लिखने के लिए कम थकाऊ बनाने के लिए एक मिनी-शेल कार्यान्वयन के रूप में सोचा जा सकता है।
zwol

4

वेथ डिवाइस बनाने के प्रयास में त्रुटि ipकमांड लाइन के तर्कों की व्याख्या करने वाले परिवर्तन के कारण होती है ।

ipपशु उपकरणों की एक जोड़ी बनाने के लिए सही आह्वान है

ip link add name veth0 type veth peer name veth1

( nameउदाहरण dev)

अब, नाम स्थान से वीपीएन सुरंग तक ट्रैफ़िक कैसे प्राप्त किया जाए? चूंकि आपके पास अपने निपटान में केवल ट्यून डिवाइस हैं, इसलिए "होस्ट" को रूट करना होगा। यानी वेथ पेयर बनाएं और एक को नेमस्पेस में रखें। सुरंग के लिए मार्ग के माध्यम से दूसरे से कनेक्ट करें। इस प्रकार, अग्रेषण सक्षम करें, और फिर आवश्यक मार्ग जोड़ें।

उदाहरण के लिए मान लीजिए कि eth0आपका मुख्य इंटरफ़ेस है, tun0आपका वीपीएन टनल इंटरफेस है, और veth0/ veth1जो इंटरफेस के veth1नाम में है, की जोड़ी है । नाम स्थान के भीतर आप के लिए सिर्फ एक डिफ़ॉल्ट मार्ग जोड़ते हैं veth1

होस्ट पर आपको पॉलिसी राउटिंग को नियुक्त करने की आवश्यकता है, उदाहरण के लिए यहां देखें । आपको क्या करने की आवश्यकता है:

जैसे कोई प्रविष्टि जोड़ें / जोड़ें

1   vpn

को /etc/iproute2/rt_tables। इसके द्वारा आप (अभी तक बनाई जाने वाली) टेबल को नाम से पुकार सकते हैं।

फिर निम्नलिखित कथनों का उपयोग करें:

ip rule add iif veth0 priority 1000 table vpn
ip rule add iif tun0 priority 1001 table vpn
ip route add default via <ip-addr-of-tun0> table vpn
ip route add <ns-network> via <ip-addr-of-veth0> table vpn

मैं आपकी तरह एक सेटअप के साथ यहाँ कोशिश नहीं कर सकता, लेकिन यह वही करना चाहिए जो आप चाहते हैं। आप पा सकते हैं कि पैकेट फ़िल्टर नियमों द्वारा ऐसे कि न तो वीपीएन और न ही "अतिथि" नेट परेशान हैं।

नायब tun0पहली जगह में नामस्थान में जाना सही काम करने जैसा लगता है। लेकिन आप की तरह मुझे वह काम नहीं मिला। पॉलिसी राउटिंग करने के लिए अगली सही चीज़ लगती है। महेंद्र का समाधान तब लागू होता है जब आप वीपीएन के पीछे के नेटवर्क को जानते हैं और अन्य सभी एप्लिकेशन उन नेटवर्कों तक कभी नहीं पहुंच पाएंगे। लेकिन आपकी प्रारंभिक स्थिति ("सभी ट्रैफ़िक और केवल ट्रैफ़िक, / से विशिष्ट प्रक्रियाओं के लिए वीपीएन के माध्यम से जाती है") ऐसा लगता है जैसे बाद की गारंटी नहीं दी जा सकती।


धन्यवाद, यह मुझे थोड़ा आगे मिलता है, लेकिन मैं अब "पर अटक गया हूं" और फिर आप "पुल से सुरंग डिवाइस को जोड़ने के लिए एक पुल का उपयोग करते हैं" भाग - कृपया संशोधित प्रश्न देखें।
zwol

मेरे द्वारा पोस्ट किए गए उत्तर के अनुसार, पूरी बात मेरी मूल स्क्रिप्ट में एक मूर्खतापूर्ण गलती पर उतरती है - "गुंजाइश लिंक" का मतलब यह नहीं है कि मैंने क्या सोचा था। लेकिन मैं आपको इनाम देने जा रहा हूं, क्योंकि आपने विभिन्न संभावनाओं को आजमाने में बहुत काम किया है, और अगर आपने नहीं किया होता तो मैं शायद पूरी तरह से छोड़ देता।
zwol

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

0

यदि आप वीपीएन के माध्यम से जो नेटवर्क एक्सेस करते हैं, वह ज्ञात है, तो आप अपनी रूटिंग तालिका को संपादित कर सकते हैं कि आप क्या चाहते हैं।

  1. अपने वर्तमान डिफ़ॉल्ट मार्ग पर ध्यान दें।

    # ip route | grep default default via 192.168.43.1 dev wlo1 proto static metric 1024

  2. वीपीएन निष्पादित करें और यह एक रूटिंग प्रविष्टि पेश करेगा।

  3. वर्तमान डिफ़ॉल्ट मार्ग (जिसे वीपीएन द्वारा जोड़ा गया है) को हटा दें जहां तालिका में पहली डिफ़ॉल्ट प्रविष्टि के रूप में पिछला डिफ़ॉल्ट मार्ग है।

    # ip route | grep default default dev tun0 scope link default via 192.168.43.1 dev wlo1 proto static metric 1024

    # ip route del default dev tun0 scope link

  4. नेटवर्क में कस्टम मार्गों को जोड़ें जो वीपीएन में ट्यून 0 के माध्यम से रूट करने के लिए है।

    # ip route add <net1>/16 dev tun0

    # ip route add <net2>/24 dev tun0

  5. वीपीएन और डायरेक्ट कनेक्शन के लिए दोनों नेमेस्वर प्रविष्टियाँ (resolv.conf में) जोड़ें।

अब सभी net1 और net2 कनेक्शन वीपीएन के माध्यम से जाएंगे और रीसेट सीधे (इस उदाहरण में wlo1 के माध्यम से) जाएंगे।


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