কেবলমাত্র নির্দিষ্ট নেটওয়ার্ক নেমস্পেসের জন্য সমস্ত ট্র্যাফিক ওপেনভিপিএন এর মাধ্যমে খাওয়ান


16

আমি একটি ভিপিএন (ওপেনভিপিএন ব্যবহার করে) স্থাপনের চেষ্টা করছি যাতে নির্দিষ্ট ট্রাফিক এবং কেবলমাত্র ট্র্যাফিকের / থেকে নির্দিষ্ট প্রক্রিয়া ভিপিএন দিয়ে যায়; অন্যান্য প্রক্রিয়াগুলির জন্য সরাসরি শারীরিক ডিভাইস ব্যবহার করা চালিয়ে যাওয়া উচিত। এটি আমার বোঝা যায় যে লিনাক্সে এটি করার উপায়টি নেটওয়ার্ক নেমস্পেসের সাথে।

যদি আমি সাধারনত ওপেনভিপিএন ব্যবহার করি (যেমন ভিপিএন এর মাধ্যমে ক্লায়েন্টের সমস্ত ট্র্যাফিক ফান্লিং করা ), এটি দুর্দান্ত কাজ করে। বিশেষত, আমি এইভাবে ওপেনভিপিএন শুরু করি:

# 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প্রোগ্রামের মাধ্যমে পরিবেশে সেট করা হয় - হ্যাঁ, এটি আচ্ছন্ন এবং ছোট হাতের নাম ব্যবহার করে।

কীভাবে এটি কাজ করতে যায় সে সম্পর্কে দয়া করে নির্দিষ্ট পরামর্শ দিন advice আমি ব্যথিতভাবে সচেতন যে আমি এখানে কার্গো কাল্ট দ্বারা প্রোগ্রামিং করছি - কেউ কি এই স্টাফের জন্য বিস্তৃত ডকুমেন্টেশন লিখেছেন? আমি কোনও খুঁজে পাচ্ছি না - সুতরাং স্ক্রিপ্টগুলির সাধারণ কোড পর্যালোচনাও প্রশংসা করা হয়।

ক্ষেত্রে এটি গুরুত্বপূর্ণ:

# 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>

আসুন শুরু করা যাক স্পষ্টভাবে: ভ্যাথ ডিভাইসগুলি সমর্থন করে? কার্নেল মডিউলগুলি (ভ্যাথ) বোঝাই হয়েছে?
কাউন্টারমোড

@ কাউন্টারমোড grep veth /proc/modulesকিছুই তালিকাভুক্ত করে না, তবে আমি জানি না এটি চূড়ান্ত কিনা। লিনোড উদাহরণগুলিতে ওএস পার্টিশনের মধ্যে কোনও কার্নেল ইনস্টল করা নেই, সুতরাং আমি নিশ্চিত না যে আমি যে কোনওভাবে অনুপস্থিত মডিউলটি লোড করতে পারি।
zwol

না lsmodএকেবারেই কোনও আউটপুট উত্পাদন? একটি ডিরেক্টরি আছে /lib/modules?
কাউন্টারমোড

lsmod: command not found। একটি আছে /lib/modules, তবে এটিতে কোনও মডিউল নেই , খালি modules.depফাইলগুলি সহ প্রতি কার্নেল ডিরেক্টরিগুলির একগুচ্ছ । আমি লিনোড-নির্দিষ্ট সহায়তায় ঘুরে দেখব এবং এটি কীভাবে অনুমান করা হবে তা আবিষ্কার করব।
zwol

হুম ... খুব বিজোড় আমি লিনোডের সাথে পরিচিত নই তবে আমার কাছে দেখে মনে হচ্ছে যেন ভ্যাথ ডিভাইসগুলি সমর্থিত নয়।
কাউন্টারমোড

উত্তর:


9

আপনি কোনও নেমস্পেসের ভিতরে ওপেনভিপিএন লিঙ্কটি শুরু করতে পারেন এবং তারপরে সেই নামের স্থানের ভিতরে যে ওপেনভিপিএন লিঙ্কটি আপনি ব্যবহার করতে চান তার প্রতিটি কমান্ড চালাতে পারেন। এটি কীভাবে করবেন তার বিশদ এখানে (আমার কাজ নয়):

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

আমি চেষ্টা করেছিলাম এবং এটি কাজ করে; ধারণাটি হ'ল বিশ্বব্যাপী পরিবর্তে একটি নির্দিষ্ট নেমস্পেসের মধ্যে ওপেনভিপিএন সংযোগের আপ এবং রুট-আপ পর্যায়গুলি পরিচালনা করার জন্য একটি কাস্টম স্ক্রিপ্ট সরবরাহ করা। আমি উপরের লিঙ্কটি থেকে উদ্ধৃতি দিচ্ছি যদি কেবল ভবিষ্যতে এটি অফলাইনে চলে যায়:

প্রথমে ওপেনভিপিএন-এর জন্য একটি - আপ স্ক্রিপ্ট তৈরি করুন। এই স্ক্রিপ্টটি ডিফল্ট নেমস্পেসের পরিবর্তে ভিপিএন নামের একটি নেটওয়ার্ক নেমস্পেসের ভিতরে ভিপিএন টানেল ইন্টারফেস তৈরি করবে।

$ 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-noexec --route-noexec --up netns-up --route-up netns-up --down netns-up

এখন আপনি এইভাবে টুনেল করার জন্য প্রোগ্রামগুলি শুরু করতে পারেন:

ip netns exec vpn command

কেবল ধরাটি হ'ল আপনাকে অনুরোধ করার জন্য রুট হওয়া দরকার ip netns exec ...এবং আপনি নিজের অ্যাপ্লিকেশনটিকে রুট হিসাবে চালাতে চান না। সমাধানটি সহজ:

sudo ip netns exec vpn sudo -u $ (whoami) কমান্ড

1
হ্যালো এবং সাইটে আপনাকে স্বাগতম! আমরা ব্যবহারকারীদের উত্তরে লিঙ্কগুলির লিখিত সামগ্রীর সংক্ষিপ্ত বিবরণ (যদি সম্ভব হয়) করতে উত্সাহিত করি। লিঙ্কটি বাসি হয়ে ওঠার ক্ষেত্রে উত্তরের মান ধরে রাখতে সহায়তা করে (যেমন সাইটটি আর অ্যাক্সেসযোগ্য নয়)। লিঙ্কযুক্ত নিবন্ধ থেকে সর্বাধিক গুরুত্বপূর্ণ অংশ / নির্দেশাবলী অন্তর্ভুক্ত করে আপনার উত্তরটি উন্নত করুন।
ইরথিল

এটি দুর্দান্ত তবে শেলটি সমস্ত ভেরিয়েবল প্রসারিত হতে বাধা দিতে আপনার খোলার হেরডোক ডিলিমিটারের চারপাশে একক উদ্ধৃতি স্থাপন করা দরকার।
ইওওয়াত

7

দেখা যাচ্ছে যে আপনি কোনও নেটওয়ার্ক নেমস্পেসে একটি টানেল ইন্টারফেস রাখতে পারেন । আমার সম্পূর্ণ সমস্যাটি ইন্টারফেসটি আনার ক্ষেত্রে একটি ভুল থেকে গেছে:

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

সমস্যাটি "স্কোপ লিঙ্ক", যা আমি কেবল রাউটিংকে প্রভাবিত করে বলে ভুল বুঝেছিলাম। এটি কার্নেলের ফলে টানেলের মধ্যে প্রেরিত সমস্ত প্যাকেটের উত্স ঠিকানা সেট করে 0.0.0.0; সম্ভবতঃ ওপেনভিপিএন সার্ভার তখন তাদের আরএফসি 1122 অনুযায়ী অবৈধ হিসাবে বাতিল করে দেবে; তা না হলেও গন্তব্য স্পষ্টতই উত্তর দিতে অক্ষম হবে।

নেটওয়ার্ক নেমস্পেসের অভাবে সবকিছু সঠিকভাবে কাজ করেছে কারণ ওপেনভিপিএন-এর বিল্ট-ইন নেটওয়ার্ক কনফিগারেশন স্ক্রিপ্টটি এই ভুল করে নি। এবং "স্কোপ লিঙ্ক" ছাড়াই আমার মূল স্ক্রিপ্টটিও কাজ করে।

(আপনি কীভাবে এটি জানতে straceপেরেছিলেন ? আপনি জিজ্ঞাসা করেছেন? ওপেনভিপিএন প্রক্রিয়া চালিয়ে টানেলের বর্ণনাকারীর কাছ থেকে পড়া সমস্ত কিছুই হ্যাক্সডাম্প সেট করুন এবং তারপরে প্যাকেট শিরোনামটি ম্যানুয়ালি ডিকোড করুন))


কোন সুযোগ আপনি এই উপর একটি গাইড লিখতে পারেন? আমি অনুরূপ কিছু সেট আপ করার চেষ্টা করছি তবে আপনার প্রশ্নের কোন অংশগুলি থেকে শুরু করা ভাল এবং কোনটি পথটি ব্যর্থতার দিকে পরিচালিত করেছে তা বলা শক্ত।
কাঁপুনি

@ ট্রাম্বি অদূর ভবিষ্যতে আমার এটি করার খুব সম্ভবত সময় নেই, তবে আপনি github.com/zackw/tbbscraper/blob/master/scriptts/openvpn-netns.c উপকারী হতে পারেন ।
zwol

যীশ, আমি নিশ্চিত না যে 1100-লাইনের সি প্রোগ্রাম সাহায্য করবে। চূড়ান্ত কনফিগারেশন, স্ক্রিপ্ট এবং পদক্ষেপ যা আপনার জন্য কাজটি সম্পন্ন করেছে তা সম্পর্কে কীভাবে? ... নাকি সি প্রোগ্রামটি এটির চূড়ান্ত বাস্তবায়ন?
কাঁপুনি

@ ট্র্রেম্বি হ্যাঁ, সি প্রোগ্রামটি আমার চূড়ান্ত বাস্তবায়ন। (আমার ব্যবহারের দৃশ্যে এটি নির্ধারণ করতে হবে, আপনি দেখুন)) আপনি সম্ভবত জিনিসটি ফেলে দিতে সক্ষম হতে পারেন - যদি শীর্ষে বড় মন্তব্য এটি কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা না করে, আমাকে জানান।
zwol

@ ট্রাম্বি বিকল্পে , নেটওয়ার্ক নেমস্পেস কীভাবে সেট আপ এবং ছিন্ন করা হয়েছে তা দেখতে github.com/zackw/tbbscraper/blob/master/scriptts/… থেকে শুরু করে " ওপেনভিএনপিএন এর অভ্যন্তর থেকে সম্পাদিত স্ক্রিপ্টগুলি" দেখুন; এবং ovpn ক্লায়েন্টের প্রকৃত প্রার্থনা github.com/zackw/tbbscraper/blob/master/scriptts/… এ রয়েছে । কোডটির অবশিষ্ট অংশগুলিকে মিনি শেল বাস্তবায়ন হিসাবে ভাবা যেতে পারে যাতে এই ক্রিয়াকলাপগুলি লেখার জন্য কম ক্লান্তিকর হয়।
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. ভিপিএন-এ থাকা নেটওয়ার্কগুলিতে টিউন দিয়ে রুটে কাস্টম রুট যুক্ত করুন।

    # ip route add <net1>/16 dev tun0

    # ip route add <net2>/24 dev tun0

  5. ভিপিএন এবং সরাসরি সংযোগের জন্য উভয় নেমসারভার এন্ট্রি (রেজোলভকনফ) যুক্ত করুন।

এখন সমস্ত নেট 1 এবং নেট 2 সংযোগগুলি ভিপিএন এর মধ্য দিয়ে যাবে এবং পুনরায় সেট হবে সরাসরি (এই উদাহরণে ডাব্লু 1 এর মাধ্যমে)।


আফসোস, ভিপিএন এর মাধ্যমে অ্যাক্সেস করা নেটওয়ার্কগুলি আগে থেকে জানা যায়নি, সুতরাং এটি আমার পক্ষে কার্যকর হবে না।
zwol
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.