আপনার কি আলাদা আলাদা আইপিভি 4 এবং আইপিভি 6 শুনার দিকনির্দেশনা প্রয়োজন?


71

আমি এনজিএনএক্সে ডুয়াল-স্ট্যাক আইপিভি 4 এবং আইপিভি 6 ভার্চুয়াল হোস্ট পরিচালনা করার জন্য বিভিন্ন কনফিগারেশন উদাহরণ দেখেছি। অনেকে এই প্যাটার্নটির পরামর্শ দেয়:

listen 80;
listen [::]:80 ipv6only=on;

আমি যতদূর দেখতে পাচ্ছি, এটি ঠিক একই জিনিস অর্জন করে:

listen [::]:80 ipv6only=off;

আপনি আগেরটি ব্যবহার করবেন কেন? আমি কেবলমাত্র ভাবতে পারি যদি আপনার প্রতিটি প্রোটোকলের সাথে সুনির্দিষ্ট অতিরিক্ত প্যারামগুলির প্রয়োজন হয়, উদাহরণস্বরূপ যদি আপনি কেবল deferredআইপিভি 4 এ সেট করতে চান ।


আইপি স্ট্যাক সংস্করণটি কোনও টিসিপি বিকল্প নয় বলে কিছু না করার কারণে তা প্রকাশ পেয়েছে।
জাভিয়ের লুকাস

1
অবশ্যই, তবে আপনি এটি listenনির্দেশে সেট করেছেন এবং বিকল্পগুলি হোস্ট প্রতি প্রয়োগ করা হয়: বন্দর জোড়া।
সিঙ্ক্রো

হুম আমি সত্যিই এমন কোনও ক্ষেত্রে কল্পনা করতে পারি না যে আপনি এটি করতে চাইবেন। আমি মনে করি এর একমাত্র কারণটি historicalতিহাসিক এবং মাইকেল হ্যাম্পটন এটি পেরেক দিয়েছিল।
জাভিয়ের লুকাস

উত্তর:


48

যে সম্ভবত হয় একমাত্র কারণ আপনি সাবেক কনস্ট্রাক্ট, এই দিন ব্যবহার করেন সম্পর্কে।

আপনি এটির কারণটি সম্ভবত এটি হ'ল ipv6onlyএনগিনেক্স ১.৩.৪ এ পরিবর্তিত হয়েছে। এর আগে এটি ডিফল্ট হয়েছিল off; নতুন সংস্করণে এটি ডিফল্ট হয় on

এটি লিনাক্সের আইপিভি 6_ভি 6 ওনল সকেট বিকল্পের সাথে এবং অন্যান্য অপারেটিং সিস্টেমে অনুরূপ বিকল্পগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য ঘটেছে, যার ডিফল্টগুলি প্রাক্কলিতভাবে অনুমানযোগ্য নয়। সুতরাং আপনি সত্যই আইপিভি 4 এবং আইপিভি 6 উভয় সংযোগের জন্য শুনছেন তা নিশ্চিত করার জন্য প্রাক্তন কনস্ট্রাক্টটির 1.3.4 পূর্বের প্রয়োজন হয়েছিল।

ipv6onlyডাবল স্ট্যাক সকেটের অপারেটিং সিস্টেমের ডিফল্ট অপ্রাসঙ্গিক কিনা তা নিশ্চিত করার জন্য এনজিনেক্স ডিফল্টে পরিবর্তন । এখন, এনজিনেক্স স্পষ্টভাবে আইপিভি 4, আইপিভি 6, বা উভয়কে আবদ্ধ করে, ডিফল্টরূপে দ্বৈত স্ট্যাক সকেট তৈরি করতে কখনই ওএসের উপর নির্ভর করে না।

প্রকৃতপক্ষে, প্রাক-1.3.4-র জন্য আমার স্ট্যান্ডার্ড এনগিনেক্স কনফিগারেশনের প্রথম কনফিগারেশন রয়েছে এবং 1.3.4-পরবর্তী পোস্টগুলির মধ্যে দ্বিতীয়টি কনফিগারেশন রয়েছে।

যদিও দ্বৈত স্ট্যাক সকেটকে বাঁধাই লিনাক্স-একমাত্র জিনিস, তবে আমার বর্তমান কনফিগারেশনগুলি এখন প্রথম উদাহরণের মতো দেখতে, তবে ipv6onlyসেট ছাড়াই বুদ্ধিমানের সাথে দেখায় :

listen [::]:80;
listen 80;

4
কিছু অপারেটিং সিস্টেমগুলি ডাবল আইপিভি 4 এবং আইপিভি 6 সকেটগুলি ওপেনবিএসডি এর মতো করে না, তাই এর জন্য আপনাকে দু'বার শুনতে হবে listen
জাস্টিন Cormack

@ জাস্টিনকর্ম্যাক হ্যাঁ, আপনি ঠিক বলেছেন এবং আমি এটি কিছু সময়ের জন্য বিবেচনা করেছি। এই পোস্টটি এখন পর্যন্ত আপডেট হয়নি।
মাইকেল হ্যাম্পটন

1
listen localhost:8080;(1.12.2) উভয়ই শুনেছে বলে মনে হচ্ছে এবং proxy_pass http://localhost:8080ভারসাম্যটি লোড করবে :: 1 এবং 127.0.0.1 এর মধ্যে - লগগুলিতে আসল আইপি পেতে আইপিভি 6 এর জন্য আমাকে একটি লাইন যুক্ত করতে হয়েছিলset_real_ip_from 127.0.0.1; set_real_ip_from ::1; real_ip_header X-Forwarded-For;
অ্যান্টনি গিবস

65

যদি আপনি একক এনগিনেক্স উদাহরণ সহ একাধিক ভোস্ট ডোমেন হোস্ট করেন তবে আপনি একক সম্মিলিত শোনার নির্দেশ ব্যবহার করতে পারবেন না

listen [::]:80 ipv6only=off;

তাদের প্রত্যেকের জন্য। এনগিনেক্সের একটি অদ্ভুত কৌতুক রয়েছে যেখানে আপনি কেবল ipv6onlyপ্রতিটি বন্দরগুলির জন্য একবার প্যারামিটার নির্দিষ্ট করতে পারেন , বা এটি শুরু করতে ব্যর্থ হবে। এর অর্থ আপনি প্রতিটি vhost ডোমেন সার্ভার ব্লকের জন্য এটি নির্দিষ্ট করতে পারবেন না।

মাইকেল যেমন উল্লেখ করেছেন, Nginx 1.3.4 দিয়ে শুরু করে, ipv6onlyপ্যারামিটারটি ডিফল্ট হয় on

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

listen 80;
listen [::]:80; 

অতিরিক্ত হিসাবে, স্যান্ডার যেমন উল্লেখ করেছেন, ব্যবহারের আইফভি ipv6only=off4 অ্যাড্রেসগুলি আইপিভি 6-তে অনুবাদ করা হয়েছে এমন অপূর্ণতা রয়েছে। যদি আপনার অ্যাপ্লিকেশন আকিসমেট বা স্টপফর্মসপ্যামের মতো কালো তালিকাভুক্তদের বিরুদ্ধে আইপি চেক করে তবে সমস্যা দেখা দিতে পারে কারণ আপনি যদি বিপরীত অনুবাদ স্তরটি না তৈরি করেন তবে আপনার অ্যাপ্লিকেশনটি স্প্যামারের আইপিভি 4 ঠিকানার আইপিভি 6 অনুবাদ যাচাই করবে, যা কোনও আইপিভি 4 ঠিকানার সাথে মেলে না won't নিষিদ্ধ জিনিসের তালিকা.


2
হ্যাঁ, আমি যেমনটি উল্লেখ করেছি deferredএবং অন্যান্য প্রতি প্রোটোকল নির্দেশাবলী একই। আপনি যে কারণে বলছেন সেই কারণে শ্রবণ নির্দেশিকা থেকে আলাদা করে নির্দিষ্ট করা যেতে পারলে এটি কার্যকর হবে।
সিঙ্ক্রো

1
এবং বিষয়টির মূল বিষয় হ'ল, আপনাকে প্রতিটি ডোমেনের জন্য আলাদাভাবে শোনার নির্দেশনা নির্দিষ্ট করতে হবে। নইলে কি হবে? সাইটটি আইপিভি 4 এর মাধ্যমে এবং আইপিভি 6 এর মাধ্যমে সূক্ষ্মভাবে কাজ করবে এটি এনজিনেক্স স্বাগত পৃষ্ঠাটি দেখায়। আরওএফএল
সিলভার মুন

2
পুরো ব্যাখ্যা জন্য আপনাকে ধন্যবাদ! ipv6only=offএকই বন্দরের জন্য দু'বার নির্দিষ্ট করার সময় আমি একটি বিভ্রান্তিকর ত্রুটি পেয়েছিলাম । আপনার উত্তর সমস্যার সমাধান!

1
এছাড়াও আপনি 2 vhosts উভয় 443 শোনা ব্যবহার করতে চান: listen 443; listen [::]:443;। ব্যবহার listen [::]:80 ipv6only=off;করে বন্দর ব্যবহারের আগে থেকেই একটি nginx ত্রুটি নিক্ষেপ করা হবে
lukeaus

16

সঙ্গে ipv6only=offহিসাবে IPv6, (সফ্টওয়্যার শুধুমাত্র) ব্যবহার ঠিকানাগুলি কনফিগারেশন শৈলী IPv4- র ঠিকানাগুলি দেখানো যেতে পারে IPv4- র-ম্যাপ IPv6, ঠিকানাগুলি উদাহরণস্বরূপ ফাইল, এনভায়রনমেন্ট ভেরিয়েবল (REMOTE_ADDR) ইত্যাদি লগ ইন করুন


3
হ্যাঁ, তাদের এইভাবে দেখানো হয়েছে।
মাইকেল হ্যাম্পটন

2

আমার বোঝার জন্য (এবং http://nginx.org/en/docs/http/ngx_http_core_module.html#listen এ ডক্স অনুসারে ) কেবলমাত্র ব্যবহার করে

listen 80;

... যদি আপনি একই বন্দরে আইপিভি 4 এবং আইপিভি 6 ট্র্যাফিক উভয়ই চ্যানেল করতে চান তবে যথেষ্ট।


1
এটি ইতিমধ্যে প্রতিষ্ঠিত হয়েছে, এবং প্রশ্নে উল্লেখ করা হয়েছে। পার্থক্যটির জন্য অন্যান্য উত্তরগুলি দেখুন।
সিঙ্ক্রো

3
এটি আমার পক্ষে হয়নি, আমার দুজনেরই দরকার ছিল। উইজেট এবং কার্ল যেখানে ipv6 ব্যবহার না করা পর্যন্ত ব্যর্থ হচ্ছে যতক্ষণ না আমি লাইনটি "যোগ করুন [::]: 80 ipv6only = অন;"
তুলসী এ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.