मैंने Google क्लाउड प्लेटफ़ॉर्म पर Using Protocol Forwarding के निर्देशों का पालन किया है। इसलिए मैं अब कुछ इस तरह है:Google क्लाउड फॉरवर्डिंग नियम आईपी पता से कैसे बाध्य और भेजें?
$ gcloud compute forwarding-rules list
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
x-fr-1 us-west1 104.198.?.?? TCP us-west1-a/targetInstances/x-target-instance
x-fr-2 us-west1 104.198.?.?? TCP us-west1-a/targetInstances/x-target-instance
x-fr-3 us-west1 104.198.??.??? TCP us-west1-a/targetInstances/x-target-instance
x-fr-4 us-west1 104.198.??.??? TCP us-west1-a/targetInstances/x-target-instance
x-fr-5 us-west1 104.198.?.??? TCP us-west1-a/targetInstances/x-target-instance
:
(नोट।। नाम बदल दिया गया है और सवाल के निशान प्रतिस्थापित किया गया है मुझे यकीन है कि यह इन निजी लेकिन खेद की तुलना में बेहतर सुरक्षित रखने के लिए मायने रखती है नहीं कर रहा हूँ)मेरा उदाहरण "एक्स" "x-target-instance" में है और इसमें "x-fr-5" के माध्यम से "x-fr-1" पांच अग्रेषण नियम हैं। मैं "x" पर nginx चला रहा हूं और मैं इसे अपने 6 बाहरी आईपी पते (उदाहरण के लिए + 5 अग्रेषण नियमों के लिए) से एक्सेस कर सकता हूं। अब तक सब ठीक है.
मुझे अब इन बाहरी आईपी पते पर सर्वर को बाध्य करने में दिलचस्पी है। का पता लगाने के लिए, मैं का उपयोग कर अजगर की कोशिश की:
import socket
import time
def serve(ip_address, port=80):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((ip_address, port))
try:
sock.listen(5)
while True:
con, _ = sock.accept()
print con.getpeername(), con.getsockname()
con.send(time.ctime())
con.close()
finally:
sock.close()
अब मैं "0.0.0.0" बाध्य कर सकते हैं और मैं कुछ रोचक परिणाम प्राप्त:
>>> serve("0.0.0.0")
('173.228.???.??', 57288) ('10.240.?.?', 80)
('173.228.???.??', 57286) ('104.198.?.??', 80)
जब मैं उसके बाहरी आईपी पते पर सर्वर के साथ संवाद, "getockname" विधि इंस्टेंस के आंतरिक आईपी पते को वापस लाती है। लेकिन जब मैं किसी बाहरी आईपी पते पर सर्वर के साथ एक अग्रेषण नियम द्वारा उपयोग किए जाने के साथ संवाद करता हूं, तो "getockname" विधियां बाहरी आईपी पता देता है।
ठीक है, अब मैं उदाहरण के आंतरिक आईपी पते बाँध:
>>> serve("10.240.?.?")
('173.228.???.??', 57295) ('10.240.?.?', 80)
फिर मैं उसके बाहरी आईपी पते पर सर्वर के साथ संवाद कर सकते हैं, और "getsockname" विधि उदाहरण के आंतरिक IP पता देता है। यह थोड़ा अजीब लगता है।
इसके अलावा, अगर मैं उदाहरण के बाहरी आईपी पते बाध्य करने के लिए प्रयास करें:
>>> serve("104.198.?.??")
error: [Errno 99] Cannot assign requested address
तब मैं कोई त्रुटि मिलती है।
लेकिन, अगर मैं अग्रेषण नियम द्वारा इस्तेमाल किया बाहरी IP पते बाध्य करने के लिए और फिर एक अनुरोध करना का प्रयास करें:
>>> serve("104.198.??.???")
('173.228.???.??', 57313) ('104.198.??.???', 80)
यह काम करता है।
अंत में मैं "ifconfig" देखो:
ens4 Link encap:Ethernet HWaddr 42:01:0a:??:??:??
inet addr:10.240.?.? Bcast:10.240.?.? Mask:255.255.255.255
inet6 addr: fe80::4001:???:????:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:37554 errors:0 dropped:0 overruns:0 frame:0
TX packets:32286 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:41201244 (41.2 MB) TX bytes:3339072 (3.3 MB)
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:65536 Metric:1
RX packets:9403 errors:0 dropped:0 overruns:0 frame:0
TX packets:9403 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:3155046 (3.1 MB) TX bytes:3155046 (3.1 MB)
और मैं केवल दो इंटरफेस देखते हैं। जाहिर है, Google क्लाउड प्लेटफार्म नेटवर्किंग की क्षमताओं को कॉलेज में अपने कंप्यूटर नेटवर्किंग क्लास से याद किया जा सकता है। मेरे अवलोकनों को सारांशित करने के लिए:
- यदि मैं इंस्टेंस के बाहरी आईपी पते पर बाध्य करना चाहता हूं, तो मैं अपना आंतरिक आईपी पता बांधता हूं।
- उदाहरण के आंतरिक आईपी पते से जुड़ी एक प्रक्रिया उदाहरण के आंतरिक या बाहरी आईपी पते के बीच गंतव्य आईपी को अलग नहीं कर सकती है।
- एकल नेटवर्किंग एडाप्टर, "ens4", किसी भी उदाहरण के 6 बाहरी आईपी पते के लिए बाध्य पैकेट प्राप्त कर रहा है।
- मैं क्यों नहीं उदाहरण के बाहरी आईपी पते बाध्य कर सकते हैं:
और यहाँ मेरे सवालों का है?
- यह कैसे है कि मैं नियमों को अग्रेषित करते हुए बाहरी आईपी पते को बांध सकता हूं जब मेरे पास कोई नेटवर्क एडेप्टर नहीं है?
- यदि मैं उदाहरण के बाहरी आईपी पते पर एसएसएच एक्सेस को प्रतिबंधित करना चाहता हूं, तो क्या मुझे आंतरिक आईपी पते को बांधने के लिए एसएसएच को कॉन्फ़िगर करना चाहिए?
- यदि मैं अग्रेषण नियम द्वारा उपयोग किए गए बाहरी आईपी पते में से एक पर HTTP प्रॉक्सी सेट करता हूं, तो प्रॉक्सी अनुरोध का स्रोत आईपी क्या होगा?
- आखिरकार, और यह एक बग हो सकता है, https://console.cloud.google.com/networking/loadbalancing/advanced/forwardingRules/list?project=xxx पर अग्रेषण नियमों को वेब इंटरफ़ेस में खाली क्यों सूचीबद्ध किया गया है जब मैं उन्हें "gcloud compute अग्रेषण-नियम सूची" के साथ देख सकता हूं?
तीसरे प्रश्न के लिए, हम आम तौर पर जो करते हैं वह टीसीपी पर फ़ायरवॉल बनाते हैं: 22 आंतरिक नेटवर्क आईपी रेंज की स्रोत आईपी रेंज के साथ, इस तरह आंतरिक नेटवर्क के भीतर से कनेक्शन ही स्वीकार किए जाएंगे। – Dagang