বেশ কয়েকটি অভিন্ন ল্যান সহ 1: 1 NAT


13

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

  1. কেন্দ্রীয় সাইটটিতে একটি ল্যান রয়েছে যার নাম্বার রয়েছে 192.168.0.0/24
  2. বেশ কয়েকটি দূরবর্তী সাইটগুলিও 192.168.0.0/24 নম্বরযুক্ত
  3. আমি ল্যান সংখ্যায়ন সংশোধন / যা করতে / চাই না / করতে পারি না
  4. বেশিরভাগ দূরবর্তী ওপেনভিপিএনগুলিতে আমার নিয়ন্ত্রণ নেই

আমার তখন প্রয়োজন:
1. ভার্চুয়াল ল্যানগুলি সংজ্ঞায়িত করুন
2. প্রতিটি সাইটের জন্য
1: 1 NAT কনফিগার করুন ৩। 1: 1 NAT কেন্দ্রীয় রাউটারে কনফিগার করতে হবে

ল্যান মানচিত্র
সুতরাং প্রতিটি সাইটে 10.10.x.0 / 24 ল্যান থাকতে দেখা যায়।
যখন কোনও কম্পিউটার পৌঁছতে চায় 12, 192.168.0.44 সাইট 12 এ, এটি কেবল 10.10.12.44 এ একটি প্যাসেজ পাঠাতে হবে

ভিপিএন পরিচালনা করা আমার পক্ষে সমস্যা নয়। আমি বর্তমানে 60+ সাইট সংযোগ করছি। তবে আমি এটি 1: 1 NAT করার সহজ উপায় খুঁজে পাই না।

কেন্দ্রীয় সাইট থেকে কোনও প্রত্যন্ত সাইটে প্রেরণ করা প্যাকেটের একটি উদাহরণ এবং এর প্রতিক্রিয়া প্যাকেট:

এখানে চিত্র বর্ণনা লিখুন

আমি আইপ্যাটিবল নেটম্যাপের সাথে কিছু পরীক্ষা করেছি তবে আমি এটি কাজ করার ব্যবস্থা করতে পারি না কারণ রাউটিংয়ের সিদ্ধান্তের পরে উত্স + গন্তব্য সংশোধন করার কোনও উপায় আমি পাই না।
আমি নতুন --client-natওপেনভিপিএন এর বৈশিষ্ট্য এড়াতে পছন্দ করি ।
আমাকে কি জোর করে রাউটিং দিয়ে যেতে হবে ip route? অথবা নেটওয়ার্ক স্ট্যাকের সাথে দু'বার লুপ করতে হবে veth?

দ্রষ্টব্য: আমি মুখোশ ব্যবহার করতে চাই না। কেবল 1/1 NAT।

সম্পাদনা:
নিয়মিত ওপেনভিপিএন সেটআপ দিয়ে এটি সম্ভব নয়। যেহেতু দূরবর্তী সাইট থেকে একটি প্যাকেট অন্য সাইট থেকে পাওয়া একটি প্যাকেট থেকে আলাদা করা যায় না: উভয়ের একই উত্স এবং গন্তব্য ঠিকানা রয়েছে এবং উভয়ই একই সুর (বা আলতো চাপুন) ইন্টারফেস থেকে আসে। সুতরাং এটি উত্স-NAT করা সম্ভব নয়।

সমাধান 1: দূরবর্তী সাইটগুলিতে NAT করুন। আমার ক্ষেত্রে সম্ভব না। আমাকে কেবল কেন্দ্রীয় সাইটে এটি করতে হবে।

সমাধান 2: প্রতিটি প্রত্যন্ত সাইটের জন্য একটি করে ভিপিএন সেটআপ করুন। সুতরাং আমি প্রত্যেকের জন্য একটি টিউন করব। আমি মনে করি এটি ঠিক হতে পারে। খুব মেমরি দক্ষ নয় তবে ঠিক আছে।

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

সমাধান 4: সর্বশেষতম ওপেনভিপিএন সংকলন করুন কারণ এটিতে 1: 1 NAT বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে। আমি এই সপ্তাহে পরীক্ষা।


1
সমাধান 4 এর জন্য আপনাকে সংকলন করতে হবে না। বেশিরভাগ বড় লিনাক্স ডিস্ট্রিবিউশনে অফিসিয়াল ওপেনভিপিএন ওয়েবসাইটে প্যাকেজ সংকলন করা হয়েছে। তবে এটি আপনার পক্ষে কার্যকর হবে না কারণ --client-nat বৈশিষ্ট্যটি একটি pushable বিকল্প। সুতরাং আপনার ক্লায়েন্টদের সর্বশেষতম আরসি সংস্করণও ব্যবহার করতে হবে (এবং আপনি বলে থাকেন যে দূরবর্তী সাইটগুলিতে আপনার নিয়ন্ত্রণ নেই)।
গ্রেগরি মউস্যাট

1
ঠিক আছে, আমি ভুল: ওপ্লেভিপিএন-এর ক্লায়েন্ট-নাট বৈশিষ্ট্যটি 100% (আমি ভেবেছিলাম এটি আইপিফিল্টারটি ব্যবহার করছে)। আমি কেবল পরীক্ষা করেছি: এটি উইন্ডোজেও কাজ করে। নীচে আমার সমাধান দেখুন।
গ্রেগরি MOUSSAT

আপনি কখনই এই কাজটি পেয়েছেন এবং আপনি কী করেছেন তা জানতে চাই।
মাইকেল গ্রান্ট

উত্তর:


2

একটি খুব প্রাথমিক সমাধান:
১. সার্ভার + ক্লায়েন্টদের জন্য ওপেনভিপিএন ২.৩ বা তার বেশি (বর্তমানে সর্বশেষতম ২.৩-আলফা)
ব্যবহার করুন ২. নীচে
ওপেনভিপিএন কনফিগারেশন বিকল্পটি ব্যবহার করুন 3.. অন্য কিছু ব্যবহার করবেন না (কোনও আইফিল্টার নেই, কোনও কৌশল নেই)

সার্ভারের দিকে, আপনাকে ম্যানুয়ালি ভিপিএন ঠিকানা বিতরণ করতে হবে (সুতরাং কোনও serverবিকল্প নেই, আপনাকে ব্যবহার করতে হবে ifconfigবা ifconfig-push):

# /etc/openvpn/server.conf
ifconfig 10.99.99.1 10.99.99.2
route 10.99.99.0 255.255.255.0
push "route 10.99.99.0 255.255.255.0"
push "client-nat dnat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat dnat 10.99.99.12 255.255.255.255 10.10.112.12"
push "client-nat dnat 10.99.99.13 255.255.255.255 10.10.113.13"

routeএবং push routeএবং client-natলাইন প্রয়োজন হয় যদি আপনি রাউটার মধ্যে সরাসরি যোগাযোগ করতে চান ( ping 10.99.99.1দুরের একটি সাইট থেকে VPN এর throught)। অন্যথায় আপনি এগুলি বাতিল করতে পারেন।

এখন আপনাকে একটি ভার্চুয়াল নেটওয়ার্ক ঠিকানা নির্বাচন করতে হবে। আপনি যেমনটি ব্যবহার করেছেন তেমনই আমি রেখেছি: 10.10.0.0/16
আপনি এর জন্য রাউটিংয়ের অনুমতি দিন:

# /etc/openvpn/server.conf
route 10.10.0.0 255.255.0.0
push "route 10.10.0.0   255.255.0.0"

আপনার এখন ক্লায়েন্টকে 1: 1 NAT ব্যবহারের নির্দেশ দিতে হবে:

# /etc/openvpn/ccd/client_11
ifconfig-push 10.99.99.11 10.99.99.1
push "client-nat snat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat snat 192.168.0.0 255.255.255.0 10.10.11.0"
push "client-nat dnat 10.10.10.0 255.255.255.0 192.168.0.0"
iroute 10.10.11.0 255.255.255.0
iroute 10.10.111.0 255.255.255.0

প্রথম লাইনটি দূরবর্তী রাউটারের ঠিকানা সেট করে। বিশেষ ঠিকানাগুলির জন্য উইন্ডোজ ড্রাইভারের বিষয়ে সতর্ক থাকুন।
দ্বিতীয় এবং শেষ লাইনগুলি দূরবর্তী রাউটারটিকে তার 10.99.99.x ইন্টারফেস থেকে যোগাযোগ করার অনুমতি দেয়।
তৃতীয় এবং চতুর্থ লাইনের উত্স এবং গন্তব্য 1: 1 NAT
পঞ্চম লাইনটি ওপেনভিপিএনকে সংশ্লিষ্ট প্যাকেটগুলির সাথে কী করতে হবে তা বলে।

এই পদ্ধতিটি কোনও ছায়াযুক্ত হোস্ট ছাড়াই অভিন্ন (বা না) ল্যান ঠিকানাগুলির সাথে সাইটগুলি সংযোগ করার অনুমতি দেয়।


1
সরল, উজ্জ্বল।
বার্ট্র্যান্ড স্কিচ

আমি এটি চেষ্টা করেছি কিন্তু এটি কাজ করতে পারেনি। আমি উভয় পক্ষেই লিনাক্স ব্যবহার করছি। কিছু কিছু অদ্ভুত বা আমি কিছু জিনিস পুরোপুরি বুঝতে পারি না। ক্লায়েন্ট_11 ফাইল (প্রথম লাইন) এ আপনার ifconfig- পুশ, এটি কি 10.99.99.1 এর পরিবর্তে দ্বিতীয় যুক্তির জন্য নেটমাস্ক হওয়া উচিত নয়? দ্বিতীয়ত, আপনি এই তৃতীয় নেটওয়ার্কটি 10.10.111.0/24 কেন ব্যবহার করছেন? দেখে মনে হচ্ছে আপনি সাইটের মধ্যে যোগাযোগের জন্য 111 নেটওয়ার্কটি ব্যবহার করার চেষ্টা করছেন, এটি কি সরাসরি 10.10 নেটওয়ার্ক ব্যবহার করা যাবে না? সবশেষে, আমি যা চেষ্টা করি তা বিবেচনা না করেই আমি ক্লায়েন্টের প্যাকেটগুলিতে প্রভাব ফেলতে থাকা স্ন্যাট এবং ডিএনএটি দেখতে পাই না (টিসিপিডম্পে)।
মাইকেল গ্রান্ট

সত্যই সহজ নয় তবুও উজ্জ্বল।
নিউরোট্রান্সমিটার

4

আমি বাস্তব ইন্টারফেসের সাথে একই রকম কিছু করেছি, তবে ভিপিএন ইন্টারফেসের সাথে এটি কেন কাজ করবে না তা আমি দেখতে পাচ্ছি না।

ধারণাটি হ'ল, আপনার যেমন রাউটারের বিভিন্ন ইন্টারফেসে একই সাবনেট পাওয়া যায়, এটি রাউটিংটিকে জটিল করে তোলে। মূলত, যখন 10.10.13.123 এর জন্য একটি প্যাকেট রাউটারে প্রবেশ করে, তখন 192.168.0.123 এ যাওয়ার আগে এটি ডিএনএটিড হয়, সুতরাং আপনাকে রাউটিংটি বলতে সক্ষম হতে হবে যে এটি ইন্টারফেস ভিপিএন 13 এ 192.168.0.123 এর উদ্দেশ্যে করা হয়েছিল ।

এটি ফায়ারওয়াল চিহ্নগুলি ব্যবহার করে এবং সেই চিহ্নগুলি ব্যবহার করে এমন রাউটিং বিধি ব্যবহার করে করা যেতে পারে। নেটম্যাপ ফায়ারওয়াল লক্ষ্য নিয়ে এসএনএটি এবং ডিএনএটি করা হবে। এসএনএটি-র জন্য এটি একই সমস্যা, পোষ্ট্রোটিংয়ে আপনি যে তথ্যটি প্যাকেটটি এই বা সেই ইন্টারফেস থেকে এসেছে তা হারিয়ে ফেলেছেন এবং তাদের সমস্ত সূত্রের ঠিকানা পেয়েছে 192.168.0.x। সুতরাং ম্যাঙ্গেল-প্রেরোটিং থেকে নাট-পোষ্ট্রোটিংয়ে সেই তথ্য বহন করার জন্য আপনারও একটি চিহ্ন প্রয়োজন। আপনি একই চিহ্নটি ব্যবহার করতে পারেন তবে তার অর্থ হ'ল সেই প্যাকেটগুলি সেই বিকল্প রাউটিং টেবিলটি ব্যবহার করবে, সুতরাং আপনাকে গ্লোবাল রাউটিং টেবিলটির নকল করতে হবে।

প্রতিটি নেটওয়ার্কের জন্য, আপনি এটি করবেন:

lnet=192.168.0.0/24
if10=eth0 if11=tun0 if12=tun1 if13=tun2

n=0
for site in 10 11 12 13; do
  table=$site
  net=10.10.$site.0/24
  n=$(($n + 1))
  eval "interface=\$if$site"
  inmark=$(($n * 2)) outmark=$(($n * 2 + 1))

  iptables -t nat -A PREROUTING -d "$net" -j NETMAP --to "$lnet"
  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -m mark --mark "$inmark"/0xf -j NETMAP --to "$net"
  iptables -t mangle -A PREROUTING -i "$interface" -j MARK --set-mark "$inmark"/0xf
  iptables -t mangle -A PREROUTING -d "$net" -j MARK --set-mark "$outmark"/0xf
  ip rule add fwmark "$outmark"/0xf table "$table"
  ip route add "$lnet" dev "$interface" table "$table"
done

উপরে, আমরা চিহ্নটির প্রথম 4 টি বিট ব্যবহার করছি , যাতে 7 টি নেটওয়ার্ককে সেভাবে রাউটেড করার অনুমতি দেওয়া হয়।


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

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

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