Libvirt / KVM- তে অতিথিদের পোর্ট ফরওয়ার্ড করা হচ্ছে


33

নেট ব্যবহার করার সময় আমি কীভাবে কোনও সার্ভারে পোর্টগুলি livvirt / KVM চালিত ভিএম এর নির্দিষ্ট পোর্টগুলিতে ফরওয়ার্ড করতে পারি?

উদাহরণস্বরূপ, হোস্টটির সার্বজনীন আইপি 1.2.3.4 রয়েছে। আমি 80 থেকে 10.0.0.1 এবং পোর্ট 22 থেকে 10.0.0.2 এ ফরোয়ার্ড করতে চাই।

আমি ধরে নিলাম আমার iptables নিয়মগুলি যুক্ত করা দরকার তবে কোথায় উপযুক্ত তা সঠিক এবং কোনটি নির্দিষ্ট করা উচিত তা আমি নিশ্চিত নই।

Iptables -L এর আউটপুট

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:bootps 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:bootps 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.0.0/24         state RELATED,ESTABLISHED 
ACCEPT     all  --  10.0.0.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Ifconfig এর আউটপুট

eth0      Link encap:Ethernet  HWaddr 00:1b:fc:46:73:b9  
          inet addr:192.168.1.14  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21b:fcff:fe46:73b9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:201 errors:0 dropped:0 overruns:0 frame:0
          TX packets:85 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:31161 (31.1 KB)  TX bytes:12090 (12.0 KB)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

virbr1    Link encap:Ethernet  HWaddr ca:70:d1:77:b2:48  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::c870:d1ff:fe77:b248/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

আমি উবুন্টু 10.04 ব্যবহার করছি।


1
কেন ifconfig ব্যবহার করছেন? আইপি হ'ল ইফকনফিগের উত্তরসূরি। ;)
ম্যানুয়েল ফ্যাক্স

5
প্রশ্ন 233760 লিবিভার্টের কোনও সংস্করণে এটিকে সম্বোধন করে। serverfault.com/questions/233760
আকাইহোলা

উত্তর:


36

উবুন্টু-র জন্য লাইবভার্টের সর্বশেষতম স্থিতিশীল সংস্করণটি 0.7.5 সংস্করণ, যার কিছু নতুন বৈশিষ্ট্য নেই (যেমন স্ক্রিপ্ট হুক এবং নেটওয়ার্ক ফিল্টার) যা স্বয়ংক্রিয় নেটওয়ার্ক কনফিগারেশনকে সহজ করে তোলে। এটি বলেছিল, উবুন্টু 10.04 লুসিড লিঙ্কে লিবারভিট 0.7.5 এর জন্য পোর্ট ফরওয়ার্ডিং কীভাবে সক্ষম করা যায় তা এখানে।

এই iptables নিয়মগুলি কৌশলটি করা উচিত:

iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22
iptables -I FORWARD -m state -d 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

ডিফল্ট কেভিএম NAT কনফিগারেশনটি আমি উপরোক্ত ২ য় স্তরের অনুরূপ একটি বিধি সরবরাহ করে তবে এটি নতুন রাষ্ট্র বাদ দেয় যা আগত সংযোগগুলি গ্রহণ করার জন্য প্রয়োজনীয়।

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

লাইনের আগে /etc/rc.local এ নিম্নলিখিত লাইনগুলি যুক্ত করুন exit 0:

(
# Make sure the libvirt has started and has initialized its network.
while [ `ps -e | grep -c libvirtd` -lt 1 ]; do
        sleep 1
done
sleep 10
# Set up custom iptables rules.
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22
iptables -I FORWARD -m state -d 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
) &

sleep 10উপরে করতে একটি হ্যাক নিশ্চিত libvirt দ্বারা ডেমন তার iptables- র নিয়ম আরম্ভ করতে আমরা আমাদের নিজেদের যোগ সামনে সুযোগ ছিল না। তারা উবুন্টুর জন্য 0.8.3 সংস্করণ প্রকাশ না করা পর্যন্ত আমি অপেক্ষা করতে পারি না।


3
আপনি কীভাবে বর্তমান লিবিভার্ট দিয়ে এটি করতে পারবেন তা ব্যাখ্যা করতে পারেন?
ম্যানুয়েল ফ্যাক্স

1
লিবওয়ার্টটি নেটওয়ার্কিং শুরু করার পরে যদি হুক স্ক্রিপ্টগুলির মধ্যে একটি চালায় তবে লুপ এবং স্লিপ কমান্ডের সময় আপনার হ্যাকের দরকার নেই। আমি নিশ্চিত নই / / ইত্যাদি / লিব্বার্ট / হুক্স / ডেমন স্ক্রিপ্টটি নেটওয়ার্ক সূচনা হওয়ার আগে বা পরে চালানো হয়েছে, তবে আপনি / etc / libvirt / hooks / qemu ব্যবহার করলে আপনি যথাযথ ভার্চুয়াল মেশিনগুলি শুরু হলে এবং বিধিগুলি তৈরি করতে এবং ধ্বংস করতে পারবেন বন্ধ। আপনি কীভাবে নেটওয়ার্ক ফিল্টারগুলি ব্যবহার করবেন তা আমি নিশ্চিত নই (তবে আদৌ) তবে libvirt.org/firewall.html- র উদাহরণগুলির কয়েকটি গন্ধ যেমন তারা iptables নিয়মগুলি তৈরি করতে স্বয়ংক্রিয় করতে পরিবর্তন করতে পারে smell
আইজাক সাদারল্যান্ড

দুর্দান্ত, আমি এটির কাজটি নিশ্চিত করতে পারি, তবে আমি সার্ভারটি পুনরায় চালু করলে কী ঘটে যায় তা চেষ্টা করে
দেখিনি

18

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

http://blog.adamspiers.org/2012/01/23/port-redirection-from-kvm-host-to-guest/

আপনি এখানে বিশদটি দেখতে পারেন, তবে সুবিধার জন্য, আমি এখানে সমাধানটি বের করে নিলাম:

virsh qemu-monitor-command --hmp sles11 'hostfwd_add ::2222-:22'

এই ওয়ান-লাইনারটি অন্যান্য উত্তরের চেয়ে অনেক সহজ তবে কেবল কিছু পরিস্থিতিতে কাজ করে (ব্যবহারকারী মোড নেটওয়ার্ক স্ট্যাক)।


3
আপনার সমাধানটি বেশ আকর্ষণীয় - আপনি কি আপনার উত্তরটিতে কিছু বিশদ বিবরণ (বা কমপক্ষে কীভাবে বিটস করতে চান) অন্তর্ভুক্ত করতে পারেন যাতে আপনার ব্লগটি রক্ষণাবেক্ষণের জন্য নিচে থাকলে তা এখনও কার্যকর? :)
voretaq7

হয়ে গেছে, আমার এসএফ খ্যাতিটি 1 ;-) এর চেয়ে বেশি যেতে সাহায্য করুন
অ্যাডাম স্পায়ার্স

এই পদ্ধতির ব্যবহারকারীর মোডে এমন একটি নেটওয়ার্ক ব্যবহার করা দরকার যা আমাদের কিছু আগ্রহী সীমাবদ্ধতা আনতে পারে। দেখুন: লিনাক্স- কেভিএম.আর / পৃষ্ঠা / নেটওয়ার্কিং # ইউজার_ নেটওয়ার্কিং । আরেকটি রেফারেন্স: topic.alibabacloud.com/a/... , snippets.webaware.com.au/howto/... ]
এদুয়ার্দো Lucio

5

আরও একটি "অফিসিয়াল" [১] এটি করার উপায় হ'ল লিবারভিট ওয়েবসাইটে বর্ণিত হুক স্ক্রিপ্ট তৈরি করা:

http://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections

... মূলত কেভিএম গেস্ট বুট-আপ করার সময় এই স্ক্রিপ্টটি চালু করা হবে। স্ক্রিপ্ট নিজেই যথাযথ iptable নিয়মগুলি (উপরে আইজাক সাদারল্যান্ডের উত্তরের অনুরূপ) 'নতুন' সংযোগের রাষ্ট্রটি সঠিকভাবে যুক্ত করার সাথে যুক্ত করবে। নোট করুন যে আপনাকে অবশ্যই আপনার হোস্ট এবং পোর্টগুলির জন্য সঠিক মান সহ স্ক্রিপ্টটি পরিবর্তন করতে হবে।

[1] যদিও লিবারভিট ডকুমেন্টেশন নিজেই বলেছে এটি হ্যাকের মতো, চিত্র দেখুন


0

"ডিফল্ট নেটওয়ার্ক" (ভার্বিআর0) দিয়ে কেভিএম (লাইবারভিট) ব্যবহার করে আমরা একটি পোর্ট ফরোয়ার্ড করতে পারার "একমাত্র" উপায়টি @ অ্যান্টনি এনগুইন জানিয়েছে হ্যাক / ওয়ার্কারআউন্ড ব্যবহার করছে। বা আরও সহজভাবে আপনি libvirt-hook-qemu ব্যবহার করতে পারেন ।

এই থ্রেডটি কীভাবে সেন্টবস 7 এর জন্য (এবং অবশ্যই অন্যান্য ডিগ্রোদের জন্য) libvirt-hook-qemu ব্যবহার করে এই সমস্যাটি সমাধান করবেন তার সম্পূর্ণ ব্যাখ্যা রয়েছে: https://superuser.com/a/1475915/195840


-1
iptables -t nat -I PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
 iptables -t nat -I PREROUTING -d 1.2.3.4 -p tcp --dport 22 -j DNAT --to-destination 10.0.0.1

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