ল্যানের ভিতর থেকে ডিএনএটি'র ওয়েব সার্ভারটি অ্যাক্সেস করা হচ্ছে


12

আমার একটি রাউটার সহ একটি ছোট নেটওয়ার্ক রয়েছে, যা স্থানীয় নেটওয়ার্কে ইন্টারনেট, একটি সার্ভার এবং কিছু ওয়ার্কস্টেশনের সাথে সংযোগ বজায় রাখে।

নেটওয়ার্ক মানচিত্র

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

-A PREROUTING -i ppp0 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10

বাহ্যিক প্যাকেটগুলি ppp0ইন্টারফেসের মাধ্যমে রাউটারে আসে এবং অভ্যন্তরীণগুলি সেগুলি থেকে যায় br-lanযা আসলে স্যুইচ এবং ডাব্লুএলএএন অ্যাডাপ্টার অন্তর্ভুক্ত করে। সমস্যাটি হ'ল বাহ্যিক অ্যাক্সেস সূক্ষ্মভাবে কাজ করার সময় ল্যানের ভিতরে থেকে ডিএনএস-সমাধান হওয়া বাহ্যিক আইপি (অ্যাসাইন করা ppp0) দ্বারা সার্ভার অ্যাক্সেস করার চেষ্টা ব্যর্থ হয়।

আমি যে সমাধানটি আবিষ্কার করতে পেরেছি তা হ'ল রাউটারের /etc/hostsনির্দেশকে অভ্যন্তরীণ আইপি-তে স্ট্যাটিক এন্ট্রি যুক্ত করা , তবে কোনও ওয়াইল্ডকার্ড না থাকায় (এবং আমার কাছে সেই সিস্টেমে অন্তত তিনটি শীর্ষ-স্তরের ডোমেন বরাদ্দ রয়েছে, দশটি সাবডোমেন গণনা করা হচ্ছে না), এটি বরং ক্রাঙ্কি এবং ব্যর্থতা-প্রবণ। আপনি কি আরও ভাল কিছু পরামর্শ দিতে পারেন?

আমি কেবল এই প্রশ্নটি পেয়েছি , যা খুব সহায়ক ছিল না।

যদি এটি প্রাসঙ্গিক হয় তবে রাউটারটি ওপেনডব্লিউআরটি 10.03 কামিকাজে ডিএনএসমাস্কের সাথে চালায়।


ওপেনডব্লিউআরটির কি সংস্করণ?
কোরি এস।

@ কোরি 10.03 স্থিতিশীল, তবে ওপেন রাইটের সাথে এর কোনও যোগসূত্র নেই, তাই না?
হোয়াইটকায়ার্ক

উত্তর:


3

আমি অবাক হয়েছি যে প্রায় 8 বছর পরেও ওপেনডব্লিউআরটি-তে ডিফল্টরূপে ব্যবহৃত ইউসিআই কনফিগারেশন সিস্টেমটি ব্যবহার করে কীভাবে এটি সঠিক পদ্ধতিতে করা যায় তা কেউ ব্যাখ্যা করেনি।

স্টিভেন সোমবারের উত্তরটি সঠিক, তবুও এটি iptablesসরাসরি কমান্ড ব্যবহার করছে , যা ইউসিআই কনফিগারেশন সিস্টেমের চেয়ে নিম্ন স্তর এবং যদি সম্ভব হয় তবে বেশিরভাগ ওপেনডব্লিউআরটি ব্যবহারকারীদের দ্বারা সবচেয়ে ভালভাবে বামে রাখা হয়।

ইউসিআইতে অন্য কোনও অভ্যন্তরীণ হোস্ট থেকে তাদের সর্বজনীন আইপি / পোর্ট কম্বোসের মাধ্যমে অভ্যন্তরীণ সার্ভারগুলি অ্যাক্সেস করার সঠিক উপায়টি হ'ল reflectionফাইলটিতে প্রতিটি নির্দিষ্ট ডিএনএটি লক্ষ্যমাত্রার অধীনে কনফিগারেশন বিকল্পটি সক্ষম করে /etc/config/firewall। এই আচরণ এখানে নথিভুক্ত করা হয়

উদাহরণ স্বরূপ:

config redirect option target 'DNAT' option src 'wan' option dest 'lan' option proto 'tcp' option src_dport '44322' option dest_ip '192.168.5.22' option dest_port '443' option name 'apache HTTPS server' option reflection '1'

দ্রষ্টব্য: উল্লিখিত ওপেনডব্লিউআরটি ডকুমেন্টেশন অনুসারে, reflectionডিফল্টরূপে সক্ষম হয়। আমার পরীক্ষায়, এটি ছিল না।


15

আমি আমার আসল উত্তরটি মুছে ফেলেছি, কারণ আমি পুরোপুরি আত্মবিশ্বাসী ছিলাম না যে এটি সঠিক ছিল। আমার তখন থেকে প্রশ্নটিতে নেটওয়ার্কটি অনুকরণ করার জন্য ভিএমগুলির একটি সামান্য ভার্চুয়াল নেটওয়ার্ক সেটআপ করার জন্য কিছু সময় ছিল। এখানে ফায়ারওয়াল নিয়মের সেট রয়েছে যা আমার পক্ষে কাজ করেছে ( iptables-saveবিন্যাসে natকেবল টেবিলের জন্য ):

-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE

প্রথম POSTROUTINGনিয়মটি ল্যানের সাথে ইন্টারনেট সংযোগ ভাগ করে নেওয়ার একটি সহজ উপায়। আমি এটি সম্পূর্ণতার জন্য সেখানে রেখেছি।

PREROUTINGনিয়ম এবং দ্বিতীয় POSTROUTINGএকসঙ্গে নিয়ম উপযুক্ত NATs প্রতিষ্ঠা, তাই বহিস্থিত IP ঠিকানা দিয়ে সার্ভারে যে সংযোগ, ঘটতে পারে এর সংযোগ বাইরে থেকে বা ল্যান ভিতরে থেকে উদ্ভূত কিনা হোক না কেন। ল্যানেলে থাকা ক্লায়েন্টরা বাহ্যিক আইপি ঠিকানার মাধ্যমে সার্ভারের সাথে সংযোগ স্থাপন করে, সার্ভারটি রাউটারের অভ্যন্তরীণ আইপি ঠিকানা (192.168.2.1) থেকে আসা সংযোগগুলি দেখে।

মজার বিষয় হল, এটি দেখা যাচ্ছে যে দ্বিতীয় পোষ্ট্রোটিং রুলেরও বেশ কয়েকটি বৈকল্পিক রয়েছে যা কাজ করে। যদি লক্ষ্যটি পরিবর্তিত হয় -j SNAT --to-source 192.168.2.1তবে এর প্রভাবটি (আশ্চর্যজনকভাবে নয়) একইরকম MASQUERADE: সার্ভারটি স্থানীয় ল্যান ক্লায়েন্টের রাউটারের অভ্যন্তরীণ আইপি ঠিকানা থেকে উদ্ভূত হিসাবে সংযোগগুলি দেখে । অন্যদিকে, যদি লক্ষ্যটি পরিবর্তিত হয় -j SNAT --to-source 89.179.245.232, তবে NATগুলি এখনও কাজ করে তবে এবার সার্ভারটি স্থানীয় ল্যান ক্লায়েন্টের রাউটারের বাইরের আইপি ঠিকানা (89.179.245.232) থেকে উদ্ভূত হিসাবে সংযোগগুলি দেখে ।

অবশেষে, লক্ষ্য করুন যে আপনার মূল PREROUTING/ DNATবিধিটি কার্যকর -i ppp0হয় না, কারণ বিধিটি কখনই ল্যান ক্লায়েন্টদের থেকে আসা প্যাকেটের সাথে মেলে না (যেগুলি এগুলি ppp0ইন্টারফেসের মাধ্যমে রাউটারে প্রবেশ করে না )। এটি PREROUTINGকেবল অভ্যন্তরীণ ল্যান ক্লায়েন্টদের জন্য একটি দ্বিতীয় নিয়ম যুক্ত করে এটি কাজ করা সম্ভব হবে তবে এটি অকার্যকর (আইএমও) হবে এবং এখনও বাহ্যিক আইপি ঠিকানার সাথে স্পষ্টভাবে উল্লেখ করতে হবে।

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


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

আপনার জন্য এটি কাজ শুনে আমি আনন্দিত!
স্টিভেন সোমবার

"আইএমও" কী? আন্তর্জাতিক উল্কা সংস্থা www.imo.net?
জোনাথন কোমার

@ macmadness86 IMO == আমার মতামত
স্টিভেন সোমবার

3

একটি সাধারণ সমাধান হ'ল স্থানীয় ডিএনএস সার্ভারে আপনার অভ্যন্তরীণ হোস্টগুলিকে নির্দেশ করা যা এই হোস্টনামগুলির জন্য সঠিক "অভ্যন্তরীণ" ঠিকানাটি দেয়।

আর একটি সমাধান - এবং আমরা এটি যেখানে আমাদের সিসকো ফায়ারওয়ালগুলিতে কাজ করি তা ব্যবহার করছি - ফায়ারওয়ালে ডিএনএস প্রতিক্রিয়াগুলি আবার লিখতে হবে যা এই ঠিকানার সাথে মিলে যায়। আমার মনে হয় না লিনাক্সের জন্য এমন সরঞ্জাম রয়েছে যা এখনই এটি করে।

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


হুম। সুতরাং আপনি কি সার্ভারের ইন্টারফেসগুলিতে বাহ্যিক আইপি যুক্ত করার এবং তারপরে রাউটারটি কনফিগার করার পরামর্শ দিচ্ছেন যাতে ল্যানের ভিতরে থেকে আগত সমস্ত প্যাকেটগুলি সেই সার্ভারে আগত হবে? আকর্ষণীয়, আমি শীঘ্রই এটি পরীক্ষা করব।
হোয়াইটকায়ার্ক

আপনি কনফিগারেশন পরামর্শ দিতে পারেন? আমি এটি চেষ্টা করেছি: ip rule add to 89.179.245.232 dev br-lan table 10; ip route add 89.179.245.232 via 192.168.2.10 dev br-lan table 10এবং এটি কার্যকর নয়।
হোয়াইটকায়ার্ক

টেবিল 10 রাউটিংয়ে কী আছে? অভ্যন্তরীণ সার্ভারগুলিতে, আপনি সম্ভবত তাদের প্রাথমিক ইন্টারফেসে একটি স্থানীয় 192.168.xx ঠিকানা (স্থানীয়ভাবে যোগাযোগের জন্য) এবং জনসাধারণের ঠিকানা (একটি উপনাম হিসাবে) উভয়ই রাখতে চান।
লার্স্ক

2

আপনি যা করতে বলছেন তা বলা হয় NAT Loopbackএবং এর জন্য আপনাকে একটি এসএনএটি নিয়ম যুক্ত করা দরকার যাতে আপনার ল্যান থেকে আপনার সার্ভারে উত্পন্ন প্যাকেটগুলি রাউটারের মাধ্যমে ফিরে যেতে পারে:

-A POSTROUTING -p tcp -s 192.168.2.0/24 -d 192.168.2.10 -m multiport --dports 22,25,80,443 -j SNAT --to-source 89.179.245.232

দুঃখের বিষয়, এটি কাজ করে না। আমি -i ppp0প্রশ্নে আমার নিয়মের বিকল্পটি মিস করেছি , যেমনটি অন্য শৃঙ্খলা দ্বারা পরিচালিত হয়েছিল; এই নিয়মটি ল্যান থেকে আগত প্যাকেটগুলির রুটিং প্রতিরোধ করবে (এবং আমি এটি সক্ষম করে দিলে প্যাকেটগুলি ভুল উত্স থেকে চলে যাবে এবং প্রত্যাখ্যাত হবে)।
হোয়াইটকোয়ার্ক

আপনি কি এটা চেষ্টা করেছেন? এটি কেবলমাত্র আপনার ল্যান থেকে প্যাকেটগুলিকে প্রভাবিত করবে আপনার সেই সার্ভারের আইপি-তে খুব নির্দিষ্ট নির্দিষ্ট পোর্টে।
সিজেএক্স

হ্যা, আমি করেছিলাম. (এবং আমিও প্রথম নিয়মটি পরিবর্তন করার চেষ্টা করেছি)। উদাহরণস্বরূপ খনক 192.168.2.1 # 53 এ একটি প্যাকেট প্রেরণ করে এবং তারপরে আপনার নিয়মটি ছাড়াই বা ছাড়াই 192.168.2.10 # 53 থেকে একটি অপ্রত্যাশিত উত্তর পেয়ে যায়।
হোয়াইটকায়ার্ক

0

নেমস্পেস-ডোমেনের অভ্যন্তরীণ সংস্করণটি হোস্টিং সম্পর্কে মন্তব্য না করা সাধারণভাবে আমি অতীতে এই সমস্যাটি পরিচালনা করেছি। অবশ্যই এটি করার জন্য আপনার অভ্যন্তরীণভাবে একটি ডিএনএস সার্ভারের প্রয়োজন।


হ্যাঁ, আমি লিখেছি যে আমি dnsmasq ব্যবহার করছি। স্বয়ংক্রিয় প্রতিস্থাপন স্থাপন সম্পর্কে কোনও ধারণা?
হোয়াইটকায়ার্ক

আমি ওপেনডব্লিউআরটি এবং কামিকাজে সম্পর্কে কিছুই জানি না তবে আমি যা পড়ছি তার ভিত্তিতে - আপনি যদি আপনার /etc/dnsmasq.conf "cname = ext-hostname.domain.com, int-hostname.domain.com" এ নিম্নলিখিতটি যুক্ত করেন তবে কি হয়
কর্টএম

ঠিক আছে, যতদূর আমি নির্ধারণ করতে সক্ষম হয়েছি, ডিএনএসম্যাস্কগুলি cnameমুখোশগুলি সমর্থন করে না এবং এটি সাবডোমেন গণনার কারণে আমার জন্য প্রযোজ্য নয়।
হোয়াইটকায়ার্ক

0

আমি আমার অতিথি নেটওয়ার্ককে পোর্টগুলিতে সংযোগ স্থাপনের জন্য আমার অতিথি নেটওয়ার্ককে ল্যান নেটওয়ার্কে ফরোয়ার্ড করার জন্য নীচের সমাধানটি দিয়ে হাজির করেছি। এই স্ক্রিপ্টটি আমার "নেটওয়ার্ক -> ফায়ারওয়াল -> কাস্টম বিধি" বিভাগে রাখা হয়েছে:

# lookup the public IP (DDNS resolves to this)
wanip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')

# Guest network to LAN
# srcname is the guest network name, this needs to match for iptables
srcname=guest
# CIDR notation of guest and lan networks
srcnet=192.168.15.0/24
tgtnet=192.168.10.0/24
# router (openwrt) IP on lan network
tgtrouter=192.168.10.1
# host on lan network where ports are normally forwarded
tgthost=192.168.10.5
# ports to forward as a list or range
tcpports=8080,9090
udpports=12345

prechain=prerouting_${srcname}_rule
postchain=postrouting_${srcname}_rule

# reset the tables to prevent duplicate rules
iptables -t nat -F ${prechain}
iptables -t nat -F ${postchain}

iptables -t nat -A ${prechain} -s ${srcnet} -d ${wanip}/32 -p tcp -m tcp -m multiport --dports ${tcpports} -m comment --comment "${srcname} NAT reflection TCP DNAT" -j DNAT --to-destination ${tgthost}
iptables -t nat -A ${postchain} -s ${srcnet} -d ${tgthost}/32 -p tcp -m tcp -m multiport --dports ${tcpports} -m comment --comment "${srcname} NAT reflection TCP SNAT" -j SNAT --to-source ${tgtrouter}
iptables -t nat -A ${prechain} -s ${srcnet} -d ${wanip}/32 -p udp -m udp -m multiport --dports ${udpports} -m comment --comment "${srcname} NAT reflection UDP DNAT" -j DNAT --to-destination ${tgthost}
iptables -t nat -A ${postchain} -s ${srcnet} -d ${tgthost}/32 -p udp -m udp -m multiport --dports ${udpports} -m comment --comment "${srcname} NAT reflection UDP SNAT" -j SNAT --to-source ${tgtrouter}

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

uci set firewall.@include[0].reload="1"
uci commit firewall

ল্যান নেটওয়ার্কের মধ্যে সংযোগগুলির জন্য NAT প্রতিফলনটি সেটআপ করা হয় তবে আপনি যদি ট্র্যাফিক বিচ্ছিন্ন করার জন্য একাধিক ইন্টারফেস তৈরি করে থাকেন তবে অন্য নেটওয়ার্কগুলিতে নয়। আমি ওয়েব ইন্টারফেস থেকে একটি ফরোয়ার্ডিং নিয়ম কনফিগার করার চেষ্টা করেছি, তবে এটি গেস্ট নেটওয়ার্ক থেকে সমস্ত লেনদেনকে সেই ল্যান হোস্টে প্রেরণ করে। উপরে উল্লিখিত সমস্ত নেটওয়ার্ক ট্র্যাফিকের পরিবর্তে কেবল WAN আইপি-র কাছে অনুরোধ জানানো হয়েছে।

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


বর্তমান কার্নেলগুলিতে conntrackম্যাচ মডিউল রয়েছে। এবং আপনার সমস্যাটি সমাধান করার জন্য যা দরকার তা হ'ল এর মতো একক নিয়ম ব্যবহার করুন:iptables -t nat -A POSTROUTING --dst <lan-net> ! --src <lan-gw-ip> -m conntrack --ctstate DNAT --ctorigdst <wan-gw-ip> -j MASQUERADE
আন্তন ড্যানিলভ

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