ভিপিএন দিয়ে কেবল নির্দিষ্ট ট্র্যাফিকের রুট করুন


11

আমি পূর্ববর্তী লোকদের অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি, কিন্তু এখনও একটি সরল উত্তর পাইনি যা আমার প্রদত্ত পরিস্থিতির জন্য কাজ করবে, তাই এখানে যায় ..

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

আমরা এটিকে সহজ করব এবং এটি সর্বাধিক ব্যবহৃত প্রোগ্রাম, ওয়ার্ল্ড অফ ওয়ারক্রাফ্টের মধ্যে সীমাবদ্ধ করব যা WINE এর মাধ্যমে চলছে।

এখন, আমার নেটওয়ার্ক ইন্টারফেসের মাধ্যমে একটি ভিপিএন সেটআপ রয়েছে যাতে এনপি 10 এস 0 এর মাধ্যমে আমার সমস্ত ট্র্যাফিকের (ভিপিএন সার্ভিসের মাধ্যমে আমার কম্পিউটারের অদ্ভুত নাম) ভিপিএন পরিষেবাদির মাধ্যমে সুরক্ষিত করা যায় তবে, আমার কেবলমাত্র নির্দিষ্ট প্রোগ্রামগুলির প্রয়োজন (বা সেই প্রোগ্রামগুলি ব্যবহার করে পোর্টগুলি করতে) VPN দিয়ে যেতে নির্দিষ্ট করুন)।

আমি কীভাবে টানেলটি সেটআপ করব, এবং কেবলমাত্র ভিপিএন দিয়ে প্রয়োজনীয় বন্দরগুলি চালিত করব, যখন সমস্ত কিছু অন-রাউটে রাখি?


অন্যান্য উত্তরগুলি কীভাবে এই সমস্যার সমাধান করে না আপনি তা ব্যাখ্যা করতে পারেন? আপনার সেটআপ সম্পর্কে অনন্য কি?
পল

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

দয়া করে আমার সম্পাদনা দেখুন
মারিয়াসম্যাটুটিয়

উত্তর:


17

আপনি যা চাইছেন তা বিদ্যমান নেই। এ কারণেই আপনি যে উত্তরগুলি পেয়েছেন তার সাথে আপনি অসন্তুষ্ট হয়েছেন (তাদের মধ্যে কিছু সম্ভবত, আমারই হয়ে উঠছেন): এঁরা সকলেই সহজ বা জটিল কোনও জেনুইন সমাধান হিসাবে নয়, কার্যকারিতার পরামর্শ দিয়েছেন ।

আমাকে বিস্তারিত বলতে দাও. সমস্ত ওএসে রাউটিং গন্তব্য ঠিকানা দ্বারা নির্ধারিত হয়: আপনার বেশ কয়েকটি ভাল রুট থাকতে পারে তবে তাদের মধ্যে পছন্দটি সংযোগটি আবেদন করার অনুরোধের ভিত্তিতে নয়, কেবল গন্তব্যের ঠিকানার উপর নির্ভর করে। দাড়ি.

আমি আপনাকে একটি তুচ্ছ উদাহরণ দেই। যখন কোনও ভিপিএন ক্লায়েন্ট তার সার্ভারের সাথে সংযোগ স্থাপন করেছে, তখনও কোনও প্রদত্ত সাইটের সাথে কোনও সংযোগ রুট করা সম্ভব, উদাহরণস্বরূপ, ভিপিএন এর বাইরে বলুন। তবে সেই বিশেষ ঠিকানায় পৌঁছানোর চেষ্টা করা সমস্ত অ্যাপ্লিকেশন ভিপিএন এর বাইরে রুট করা হবে: ভিপিএন এর বাইরে অন্য অ্যাপ্লিকেশনগুলি পাস করার সময় আপনার কাছে কিছু অ্যাপ্লিকেশন ভিপিএনের মাধ্যমে উদাহরণ.আর যাবে না।

লিনাক্স কার্নেলের সাহায্যে পরিস্থিতি আরও সমৃদ্ধ হয়ে ওঠে, যা উত্সের রাউটিংয়ের অনুমতি দেয়: এর অর্থ আপনার দুটি বা ততোধিক রাউটিং টেবিল থাকতে পারে এবং এর মধ্যে পছন্দটি উত্সের ঠিকানির উপর ভিত্তি করে, গন্তব্যের ঠিকানা নয়।

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

পর্যাপ্ত পরিমাণে, আমরা যে সংযোগগুলি শুরু করি সেগুলি সম্পর্কে কী? কিছু অ্যাপস আপনাকে ওপেনশাহ ক্লায়েন্টের মতো, বাইন্ড ঠিকানা নির্দিষ্ট করার অনুমতি দেয় :

-বি বাইন্ড_এড্রেস

সংযোগের উত্স ঠিকানা হিসাবে স্থানীয় মেশিনে বাইন্ড_ড্রেস ব্যবহার করুন। একাধিক ঠিকানা সম্বলিত সিস্টেমে কেবল কার্যকর।

তাদের ক্ষেত্রে, ভিপিএন (উদাহরণস্বরূপ, রাউটিং টেবিল 1) এর মাধ্যমে একটি উদাহরণ স্থাপন করতে সমস্যা নেই, অন্য উদাহরণটি ভিপিএন এর বাইরে চলে যাবে (বলুন রাউটিং টেবিল 2)। তবে ফায়ারফক্সের মতো অন্যান্য অ্যাপ্লিকেশনগুলিকে কেবল নির্দিষ্ট উত্স আইপি ঠিকানার সাথে আবদ্ধ করা কুখ্যাত নয় (তবে এখানে একটি খুব স্মার্ট ওয়ার্কআউন্ডাউন্ড দেখুন), তবে এগুলি মেকিং এবং কদর্য কারণ এটি আপনাকে নিজের দুটি কপি রাখতে দেবে না একই সাথে চলমান, প্রতিটি আলাদা উত্সের ঠিকানায় আবদ্ধ। অন্য কথায়, উপরে উল্লিখিত কৌতুককে ধন্যবাদ জানাতে গিয়ে আপনি একটি উদাহরণ আপনার পছন্দসই উত্সের সাথে আবদ্ধ করতে বাধ্য করতে পারেন, তবে এর অন্য সংস্করণ অন্য উত্সের ঠিকানায় আবদ্ধ থাকতে পারে না।

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

সম্ভবত আপনি এখনও কাজের ক্ষেত্রগুলির একটিতে আগ্রহী?

সম্পাদনা করুন:

সবচেয়ে সহজ কাজটি একটি নেটওয়ার্ক নেমস্পেস। হ্যান্ডলগুলি একটি NNS এর প্রয়োজনীয় সকল দিক নিচের স্ক্রিপ্ট: একটি ফাইল রাখা (আপনার নাম বাছুন, আমি সাধারণত ব্যবহার newns, কিন্তু আপনি যাই হোক না কেন আপনি চান না) মধ্যে /usr/local/bin, তারপর chmod 755 FILE_NAME, এবং আপনি এটা অনুসরণ করে ব্যবহার করতে পারেন:

       newns NAMESPACE_NAME start
       newns NAMESPACE_NAME stop

এটি xtermআপনার জন্য একটি উন্মুক্ত করবে (এটি কারণ আমি কাজ করতে এক্সটারম পছন্দ করি তবে আপনি অন্য কোনও কিছু ব্যবহার করতে চান তবে আপনি এটি পরিবর্তন করতে পারেন), যা নতুন নেমস্পেসের সাথে সম্পর্কিত। এক্সটার্মের অভ্যন্তর থেকে আপনি যদি চান তবে আপনার ভিপিএন শুরু করুন এবং তারপরে আপনার গেমটি শুরু করুন। আপনি নীচের কমান্ডের মাধ্যমে ভিপিএন ব্যবহার করছেন তা সহজেই পরীক্ষা করতে পারেন:

    wget 216.146.38.70:80 -O - -o /dev/null | cut -d" " -f6 | sed 's/<\/body><\/html>//'

যা আপনাকে আপনার সর্বজনীন আইপি ফিরিয়ে দেয়। এক্সটার্মে ভিপিএন স্থাপন করার পরে, আপনি অন্যান্য উইন্ডোতে আপনার সার্বজনীন আইপি আলাদা কিনা তা পরীক্ষা করতে পারেন। আপনি 254 টি আলাদা এনএনএস এবং বিভিন্ন সংযোগ সহ 254 এক্সটারমি পর্যন্ত খুলতে পারেন।

#!/bin/bash

#
# This script will setup an internal network 10.173.N.0/24; if this causes
# any conflict, change the statement below.

export IP_BASE=10.173

# It will open an xterm window in the new network namespace; if anything
# else is required, change the statement below.

export XTERM=/usr/bin/xterm

# The script will temporarily activate ip forwarding for you. If you
# do not wish to retain this feature, you will have to issue, at the 
# end of this session, the command
# echo 0 > /proc/sys/net/ipv4/ip_forward 
# yourself. 

 ###############################################################################

 WHEREIS=/usr/bin/whereis

 # First of all, check that the script is run by root:


 [ "root" != "$USER" ] && exec sudo $0 "$@"

 if [ $# != 2 ]; then
    echo "Usage $0 name action"
    echo "where name is the network namespace name,"
    echo " and action is one of start| stop| reload."
    exit 1
 fi

 # Do we have all it takes?

 IERROR1=0
 IERROR2=0
 IERROR3=0
 export IP=$($WHEREIS -b ip | /usr/bin/awk '{print $2}')
 if [ $? != 0 ]; then
    echo "please install the iproute2 package"
    IERROR1=1
 fi

 export IPTABLES=$($WHEREIS -b iptables | /usr/bin/awk '{print $2}')
 if [ $? != 0 ]; then
    echo "please install the iptables package"
    IERROR2=1
 fi

 XTERM1=$($WHEREIS -b $XTERM | /usr/bin/awk '{print $2}')
 if [ $? != 0 ]; then
    echo "please install the $XTERM package"
    IERROR3=1
 fi
 if [ IERROR1 == 1 -o IERROR2 == 1 -o IERROR3 == 1 ]; then
    exit 1
 fi

 prelim() {

 # Perform some preliminary setup. First, clear the proposed 
 # namespace name of blank characters; then create a directory
 # for logging info, and a pid file in it; then determine 
 # how many running namespaces already exist, for the purpose
 # of creating a unique network between the bridge interface (to 
 # be built later) and the new namespace interface. Lastly, 
 # enable IPv4 forwarding. 

    VAR=$1
    export NNSNAME=${VAR//[[:space:]]}

    export OUTDIR=/var/log/newns/$NNSNAME

    if [ ! -d $OUTDIR ]; then
            /bin/mkdir -p $OUTDIR
    fi
    export PID=$OUTDIR/pid$NNSNAME

    # Find a free subnet

    ICOUNTER=0
    while true; do
            let ICOUNTER=ICOUNTER+1
            ip addr show | grep IP_BASE.$ICOUNTER.1 2>&1 1> /dev/null
            if [ ! $? == 0 -a $ICOUNTER -lt 255 ]; then
                    export Nns=$ICOUNTER
                    break
            elif [ ! $? == 0 -a $ICOUNTER -gt 254 ]; then
                    echo "Too many open network namespaces"
                    exit 1
            fi
    done
    if [ $Nns == 1 ]; then
            echo 1 > /proc/sys/net/ipv4/ip_forward
    fi

 }

 start_nns() {

 # Check whether a namespace with the same name already exists. 

    $IP netns list | /bin/grep $1 2> /dev/null
    if [ $? == 0 ]; then
            echo "Network namespace $1 already exists,"
            echo "please choose another name"
            exit 1
    fi

    # Here we take care of DNS

    /bin/mkdir -p /etc/netns/$1
    echo "nameserver 8.8.8.8" > /etc/netns/$1/resolv.conf
    echo "nameserver 8.8.4.4" >> /etc/netns/$1/resolv.conf


    # The following creates the new namespace, the veth interfaces, and
    # the bridge between veth1 and a new virtual interface, tap0.
    # It also assigns an IP address to the bridge, and brings everything up

    $IP netns add $1
    $IP link add veth-a$1 type veth peer name veth-b$1
    $IP link set veth-a$1 up
    $IP tuntap add tap$1 mode tap user root
    $IP link set tap$1 up
    $IP link add br$1 type bridge
    $IP link set tap$1 master br$1
    $IP link set veth-a$1 master br$1
    $IP addr add $IP_BASE.$Nns.1/24 dev br$1
    $IP link set br$1 up

    # We need to enable NAT on the default namespace

    $IPTABLES -t nat -A POSTROUTING -j MASQUERADE

    # This assigns the other end of the tunnel, veth2, to the new 
    # namespace, gives it an IP address in the same net as the bridge above, 
    # brings up this and the (essential) lo interface, sets up the 
    # routing table by assigning the bridge interface in the default namespace
    # as the default gateway, creates a new terminal in the new namespace and 
    # stores its pid for the purpose of tearing it cleanly, later. 

    $IP link set veth-b$1 netns $1
    $IP netns exec $1 $IP addr add $IP_BASE.$Nns.2/24 dev veth-b$1
    $IP netns exec $1 $IP link set veth-b$1 up
    $IP netns exec $1 $IP link set dev lo up
    $IP netns exec $1 $IP route add default via $IP_BASE.$Nns.1
    $IP netns exec $1 su -c $XTERM $SUDO_USER &
    $IP netns exec $1 echo "$!" > $PID



}

stop_nns() {

# Check that the namespace to be torn down really exists

    $IP netns list | /bin/grep $1 2>&1 1> /dev/null
    if [ ! $? == 0 ]; then
            echo "Network namespace $1 does not exist,"
            echo "please choose another name"
            exit 1
    fi

    # This kills the terminal in the separate namespace, 
    # removes the file and the directory where it is stored, and tears down
    # all virtual interfaces (veth1, tap0, the bridge, veth2 is automatically
    # torn down when veth1 is), and the NAT rule of iptables. 

    /bin/kill -TERM $(cat $PID) 2> /dev/null 1> /dev/null
    /bin/rm $PID
    /bin/rmdir $OUTDIR
    $IP link set br$1 down
    $IP link del br$1
    $IP netns del $1
    $IP link set veth-a$1 down
    $IP link del veth-a$1
    $IP link set tap$1 down
    $IP link del tap$1
    $IPTABLES -t nat -D POSTROUTING -j MASQUERADE
    /bin/rm /etc/netns/$1/resolv.conf
    /bin/rmdir /etc/netns/$1

}


case $2 in
    start)
            prelim "$1"
            start_nns $NNSNAME
            ;;
    stop)
            prelim "$1"
            stop_nns $NNSNAME
            ;;
    reload)
            prelim "$1"
            stop_nns $NNSNAME
            prelim "$1"
            start_nns $NNSNAME
            ;;
    *)
 # This removes the absolute path from the command name

            NAME1=$0
            NAMESHORT=${NAME1##*/}

            echo "Usage:" $NAMESHORT "name action,"
            echo "where name is the name of the network namespace,"
            echo "and action is one of start|stop|reload"
            ;;
 esac

আপনি যদি চান তবে আপনি নতুন নেটওয়ার্ক নেমস্পেসের মাধ্যমে একটি সম্পূর্ণ ডেস্কটপ শুরু করতে পারেন

            sudo startx -- :2 

তারপরে আপনি এটি Alt+ Ctrl+ ব্যবহার করে অনুসন্ধান করতে পারেন Fn, যেখানে Fn F1, F2, ....-

আমাকে একটি সতর্কতা যুক্ত করতে হবে: নেমস্পেসের ভিতরে ডিএনএস হ্যান্ডলিং করা কিছুটা বগি, ধৈর্য ধরুন।


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

পছন্দ করুন সহজতম কাজটি বেছে নেওয়ার জন্য, আপনার ভিপিএন-এর সাথে আপনার রাউটিং টেবিলটি পোস্ট করা উচিত, এবং ভিডিওগেমার আদৌ ইউডিপি পোর্ট ব্যবহার করে কিনা তা আমাকে জানিয়ে দেওয়া উচিত।
মারিউস ম্যাটুটিয়

এটি টিসিপি এবং ইউডিপি উভয় বন্দর ব্যবহার করে 443, 3724 এবং 1119 রুট পরবর্তী প্রশংসায় পোস্ট করা হবে
জোশ

$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp10s0 1.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp10s0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp10s0 199.168.112.120 192.168.1.1 255.255.255.255 UGH 100 0 0 enp10s0
জোশ রেমন্ড

আমি ভাবছি @ মারিয়াসমাতুটিয় উত্তরে কেন একটি নল এবং একটি সেতু তৈরি করে? দেখে মনে হচ্ছে এটি ঠিকঠাক ডিভাইস ব্যবহার করে কাজ করে।
ইয়ান কেলিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.