ตามค่าเริ่มต้น Ubuntu จะไม่กรองการพยายามเชื่อมต่อขาเข้าด้วยไฟร์วอลล์ ดังนั้นหากคุณไม่ได้เปลี่ยนการตั้งค่าไฟร์วอลล์ใน Ubuntu ความพยายามในการเปิดการเชื่อมต่อกับพอร์ต TCP ใด ๆ ตั้งแต่ 1 ถึง 65535 จะเป็นดังนี้:
นั่นทำให้สถานการณ์ที่คุณอธิบายได้อย่างแน่นอน ดังนั้นคุณสามารถแก้ไขได้ด้วยการทำให้แน่ใจว่าพอร์ตนั้นถูกส่งต่อไปยังที่อยู่ IP ที่ถูกต้องบน LAN
... จากนั้นคุณจะต้องแก้ไขปัญหาบางอย่าง
พอร์ตที่ระบุสำหรับฝั่ง LAN ถูกต้องหรือไม่? นั่นคือสมมติว่าคุณไม่ได้เปลี่ยนการกำหนดค่าเซิร์ฟเวอร์ SSH เป็นพอร์ต 57757 บนฝั่ง WAN ตั้งค่าให้ส่งต่อไปยังพอร์ต 22บนเซิร์ฟเวอร์ OpenSSH หรือไม่ (คุณอาจต้องการตรวจสอบอีกครั้ง)
อาจมีปัญหากับพอร์ตเฉพาะที่คุณเลือก (57757) ลองใช้วิธีอื่นและดูว่าใช้งานได้ดีกว่าหรือไม่
(หากไม่เป็นเช่นนั้นและคุณดำเนินการตามคำแนะนำเหล่านี้ให้เปลี่ยนกลับหรือแทนที่ "57757" ด้านล่างด้วยหมายเลขใหม่)
ลองรีสตาร์ทเซิร์ฟเวอร์ OpenSSH อาจช่วยได้หากมีปัญหาเครือข่าย หากวิธีนี้ไม่ได้ผลให้ลองรีสตาร์ทเราเตอร์และเคเบิล / โมเด็ม DSL / ISDN ด้วย
หากด้วยเหตุผลบางอย่างที่คุณไม่สามารถรีสตาร์ทอุปกรณ์ทั้งสามนี้ได้ฉันขอแนะนำให้รีสตาร์ทสิ่งที่คุณสามารถทำได้ หากคุณไม่สามารถเริ่มบริการ OpenSSH ใหม่ได้อย่างน้อยคุณก็สามารถเริ่มบริการใหม่ได้ (และมีแนวโน้มที่จะแก้ไขได้) ให้ลดการเชื่อมต่อและนำขึ้นมาอีกครั้ง
ในการรีสตาร์ทเซิร์ฟเวอร์ OpenSSH:
sudo restart ssh
หากต้องการลดส่วนต่อประสานเครือข่ายลงอันดับแรกให้หาว่าอินเทอร์เฟซใดเปิดอยู่:
ifconfig
โดยปกติสำหรับเครื่องที่มีการ์ดอีเทอร์เน็ตเดียวและ / หรือการ์ดไร้สายเดียวอีเธอร์เน็ตเป็นและไร้สายคือeth0
wlan0
หากการเชื่อมต่อ Ethernet แบบต่อสายเป็นสิ่งที่คุณต้องการถอดและรีสตาร์ทให้เรียกใช้:
sudo ifdown eth0
จากนั้นเรียกใช้:
sudo ifup eth0
หรือคุณสามารถเรียกใช้:
sudo ifconfig eth0 down
ติดตามโดย:
sudo ifconfig eth0 up
หากเครื่องกำลังใช้ NetworkManager เพื่อจัดการอินเทอร์เฟซที่เซิร์ฟเวอร์ OpenSSH กำลังทำงานอยู่ฉันยังคงแนะนำให้ลองทำตามวิธีข้างต้น แต่คุณสามารถลองยกเลิกการเชื่อมต่อและเชื่อมต่อใหม่ใน NetworkManager
สำหรับการเชื่อมต่ออีเธอร์เน็ตให้ลองถอดสายเคเบิลและเสียบกลับเข้าไปใหม่สำหรับการเชื่อมต่อไร้สายให้ลองปิดด้วยสวิตช์ฮาร์ดแวร์ (ถ้ามี) และเปิดใหม่อีกครั้ง
มีบางอย่างผิดปกติเกิดขึ้นที่นี่และไม่มีสิ่งใดที่ใช้เวลานานมาก - มันคุ้มค่าที่จะได้ตรวจสอบอย่างละเอียดก่อนที่จะทำตามขั้นตอนการแก้ไขปัญหาที่ยากขึ้น
คุณพยายามเข้าถึงจากฝั่ง WAN อย่างไร หากคุณกำลังใช้เครื่องบน LANเพื่อทำสิ่งนี้ (เพียงเชื่อมต่อจาก LAN กับ WAN IP ของเราเตอร์ของคุณ) สิ่งนี้จะรองรับเราเตอร์บางตัวเท่านั้น ท้ายที่สุดแล้วงานของเราเตอร์คือกำหนดเส้นทางการจราจรระหว่างฝั่ง WAN และ LAN ไม่ใช่เพื่อกำหนดเส้นทางการจราจรจากด้านหนึ่งไปยังอีกฝั่งหนึ่ง การสนับสนุนการเชื่อมต่อกับพอร์ตที่ส่งต่อบน WAN IP จากภายใน LAN นั้นเป็นข้อยกเว้นมากกว่ากฎแม้ว่าเราเตอร์ที่บ้าน / สำนักงานหลายแห่งจะมีคุณสมบัตินี้
ดังนั้นหากคุณไม่ได้ทดสอบพอร์ตไปข้างหน้าจากโฮสต์ทางฝั่ง WAN คุณควรทำเช่นนั้น ตัวเลือกของคุณสำหรับสิ่งนี้คือ:
เชื่อมต่อตัวคุณเองจากฝั่ง WAN วิธีนี้ใช้งานได้หากคุณเข้าถึงเครื่องที่นั่นเช่นการเข้าถึง SSH ไปยังเครื่องระยะไกลที่โรงเรียนงานบ้านเพื่อนหรือคล้ายกัน
เชื่อมต่อเครื่องทดสอบระหว่างเราเตอร์กับอุปกรณ์ที่มีการเชื่อมต่ออินเทอร์เน็ต หากคุณมีโมเด็มเคเบิล / DSL / ISDN ที่มีพอร์ตอีเธอร์เน็ตและเราเตอร์ของคุณเสียบอยู่กับที่คุณสามารถเชื่อมต่อสวิตช์กับโมเด็มและเชื่อมต่อเราเตอร์กับสวิตช์ เชื่อมต่อคอมพิวเตอร์เข้ากับสวิตช์ ก่อนอื่นดูว่าเครื่องนั้นเพิ่งเข้าถึงอินเทอร์เน็ต - วันนี้ ISP หลายแห่งให้ที่อยู่ IP อย่างน้อยสองรายการขึ้นไป หากไม่เป็นเช่นนั้นให้ไปที่หน้าการตั้งค่าเราเตอร์ของคุณและตรวจสอบ WAN IP และWAN ซับเน็ตมาสก์จากนั้นกำหนด IP แอดเดรสให้กับเครื่องที่เชื่อมต่อสวิตช์ที่อยู่ภายในเครือข่ายย่อยเดียวกัน
วิธีนี้มีข้อเสีย มันเป็นความเจ็บปวด! นอกจากนี้ยังเป็นไปได้ในทางทฤษฎีสำหรับ ISP ที่จะกำหนดค่าเครือข่ายของพวกเขาอย่างไม่ถูกต้องเพื่อให้เครื่องทดสอบที่เชื่อมต่อกับสวิตช์สามารถเข้าถึงอินเทอร์เน็ตได้ (เว้นแต่จะเป็นความตั้งใจของ ISP ที่จะให้คุณเชื่อมต่อกับ IP WAN มากกว่าหนึ่งและคุณได้เลือก WAN IP สำหรับเครื่องทดสอบที่ ISP ของคุณกำหนดให้กับคุณการรับส่งข้อมูลระหว่างนั้นกับโฮสต์ WAN ที่แท้จริงควรถูกบล็อก / ปล่อยโดย ISP แต่ผู้ให้บริการอินเทอร์เน็ตบางรายมีแนวทางปฏิบัติแปลก ๆ ใครจะไปรู้?) หากเกิดเหตุการณ์นี้มันจะไม่ทำให้เกิดปัญหาร้ายแรงกับใคร (และแม้ว่าจะเป็นไปได้ก็ตาม) คุณจะต้องเชื่อมต่อกับมันเพียงไม่กี่นาที อย่างไรก็ตามอาจเป็นความพยายามในการเข้าถึงเพิ่มเติมนอกเหนือจากขอบเขตการสมัครสมาชิกของคุณและที่สำคัญกว่านั้นคือหากผู้ใช้รายอื่นมี IP เดียวกันนั้นอาจมีผลต่อการเชื่อมต่อของพวกเขา ดังนั้นหากคุณต้องการลองวิธีนี้อย่าพยายามเข้าถึงอินเทอร์เน็ตจากเครื่องทดสอบหยุดทันทีหากคุณพบว่าเครื่องทดสอบสามารถเข้าถึงอินเทอร์เน็ตได้และอย่าพยายามทำสิ่งนี้เลยหาก ISP ของคุณถูกห้ามหรือให้คำแนะนำ (และอย่าใช้สิ่งนี้หากด้าน WAN ของเราเตอร์ของคุณคือ LAN ในสำนักงานโดยไม่ปรึกษาผู้ดูแลระบบเครือข่ายของคุณก่อนนั่นไม่ใช่ ISP และไม่มีข้อสันนิษฐานว่ามีการจัดสรรทรัพยากรเพื่อป้องกันการเข้าถึงที่ไม่พึงประสงค์)
มีการเปลี่ยนแปลงในเทคนิคนี้ซึ่งบางครั้งก็เหมาะสมกว่า เราเตอร์ของคุณอาจได้รับข้อมูลการเชื่อมต่อ - ที่อยู่ IP ซับเน็ตมาสก์ที่อยู่ IP ของเกตเวย์ (เราเตอร์) บนเครือข่าย WAN ที่มันใช้เมื่อมันไม่ทราบว่าจะส่งอะไรบางอย่างและข้อมูลเกี่ยวกับเซิร์ฟเวอร์ DNS - จากคุณ ISP ผ่าน DHCP ผ่านโมเด็มเคเบิล / DSL / ISDN นี่คือเหตุผลที่คุณต้องมีเราเตอร์เสียบเข้ากับโมเด็มเพื่อให้การกำหนดค่าที่จำเป็นเพื่อให้ผลลัพธ์ของการทดสอบด้าน WAN มีความหมาย แต่โดยทั่วไปเราเตอร์จะจดจำข้อมูลนี้ตราบใดที่มีการเชื่อมต่อกับเครือข่ายทางด้าน WAN ดังนั้นคุณสามารถเชื่อมต่อเราเตอร์โมเด็มและเครื่องทดสอบได้ แต่อย่างรวดเร็วและก่อนที่จะทำอะไรกับเครื่องทดสอบนอกจากนี้ตรวจสอบให้แน่ใจว่าสวิทช์เห็นว่ามันเชื่อมต่ออยู่ให้ถอดโมเด็มออก
ใช้บริการฟรีบนอินเทอร์เน็ตเพื่อทดสอบพอร์ตของคุณ เนื่องจากการแทรกเครื่องทดสอบระหว่างอินเทอร์เฟซ WAN ของเราเตอร์และอินเทอร์เน็ต (ด้านบน) นั้นมีส่วนเกี่ยวข้องสูง - และเนื่องจากมันจะแสดงพอร์ตที่สามารถเข้าถึงได้แม้ว่ามันจะไม่สามารถเข้าถึงได้เนื่องจาก ISP ของคุณถูกบล็อก WAN IP ของเราเตอร์จากด้าน LAN) - โดยปกติจะดีกว่าการใช้บริการสแกนพอร์ตผ่านเว็บ
มีบริการสแกนพอร์ตมากมาย (บางคนใช้วลีว่า "ตรวจสอบไฟร์วอลล์ของคุณ" ด้วยแนวคิดที่ว่าคนส่วนใหญ่พยายามบล็อกแทนที่จะอำนวยความสะดวกในการเข้าถึง) นี่คือหนึ่ง หากคุณเลือกที่จะใช้ที่หนึ่งคลิกดำเนินการพิมพ์ 57757 ลงในกล่องข้อความและคลิกใช้ระบุกำหนดเองพอร์ต Probe สำหรับจุดประสงค์ในการทำให้เซิร์ฟเวอร์ทำงานคุณต้องการให้เป็น "เปิด" "ปิด" หมายถึงพอร์ตสามารถเข้าถึงได้ แต่เซิร์ฟเวอร์ไม่ได้ทำงานอยู่ (และความพยายามในการเชื่อมต่อถูกปฏิเสธ) "Stealth" หมายถึงพอร์ตไม่สามารถเข้าถึงได้ - ราวกับว่าไม่มีเครื่องอยู่ที่นั่น (หรือราวกับว่าพอร์ตนั้นถูกส่งต่อโดยที่ไม่มีเครื่อง)
ตกลงดังนั้นคุณได้พิจารณาแล้วว่าไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต อาจเป็นไปได้ว่าคุณสามารถสแกนได้ (โดยเฉพาะจากฝั่ง WAN) เพื่อรับรายละเอียด แต่บ่อยครั้งที่สิ่งนี้จะไม่ให้ข้อมูลที่เป็นประโยชน์
หากคุณต้องการทำสิ่งนี้ทางฝั่ง WAN คุณสามารถเรียกใช้:
sudo nmap -sS -sV -p57757 -vv WAN-IP
หากพอร์ตนั้นแสดงเป็นตัวกรองนั่นเป็นการยืนยันว่าแพ็กเก็ตที่ส่งไปนั้นอาจจะไม่มีที่ไหนเลย (หรือถูกบล็อก / หลุดไปพร้อมกัน)
ควรตรวจสอบเพื่อดูว่าปัญหาเกิดขึ้นจากพอร์ตที่เปิดเผยกับ WAN นั้นแตกต่างจากพอร์ตที่เซิร์ฟเวอร์กำลังฟังอยู่หรือไม่ การส่งต่อพอร์ต 55757 บน WAN ไปยังพอร์ต 22 บนเครื่อง LAN ควรทำให้สิ่งต่าง ๆ ดี แต่บางทีที่ใดที่หนึ่ง (เซิร์ฟเวอร์ไคลเอนต์) มีบางสิ่งที่สมมติว่าหมายเลขพอร์ตเหมือนกันจากมุมมองของเซิร์ฟเวอร์และไคลเอนต์
สมมุติว่าคุณไม่สามารถส่งต่อพอร์ต 22 ผ่านเราเตอร์ได้ บางที ISP ของคุณบล็อกพอร์ตนั้น แต่ถ้าคุณทำได้ก็ทำอย่างนั้น!
มิฉะนั้นคุณสามารถทำให้เซิร์ฟเวอร์ OpenSSH จริงฟังพอร์ต 57757
หากต้องการทำสิ่งนี้ให้สำรองไฟล์การกำหนดค่าเซิร์ฟเวอร์:
cd /etc/ssh
sudo cp sshd_config sshd_config.old
จากนั้นแก้ไข:
gksu gedit sshd_config
หรือใช้เท็กซ์เอดิเตอร์คอนโซลหากเครื่องไม่มี GUI:
sudo nano -w sshd_config
ใกล้กับส่วนบนของไฟล์ข้อความนี้จะปรากฏขึ้น:
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
เพียงแค่เปลี่ยนPort 22
สายที่ด้านบนเพื่อพูดPort 57757
แทน
บันทึกไฟล์ออกจาก text editor และรีสตาร์ทเซิร์ฟเวอร์ SSH ด้วย:
sudo restart ssh
ตอนนี้เปลี่ยนพอร์ตไปข้างหน้าบนเราเตอร์ดังนั้นพอร์ต 57757 ส่งต่อไปยังพอร์ต 57757 (ไม่ใช่ 22) บนเซิร์ฟเวอร์ OpenSSH และดูว่ามันสามารถเข้าถึงได้จากอินเทอร์เน็ต
ถ้ามันยังใช้งานไม่ได้ดูว่าบางทีไฟร์วอลล์ของอูบุนตูกำลังปิดกั้นการรับส่งข้อมูลที่มาจากภายนอก LAN หรือไม่
(สิ่งนี้ไม่น่าเป็นไปได้ถ้าคุณไม่ได้กำหนดค่าด้วยตัวเอง แต่ถ้าการตั้งค่าทั้งหมดถูกต้องและไม่มีขั้นตอนข้างต้นเปิดเผยอะไรเกี่ยวกับปัญหามันก็คุ้มค่าที่จะตรวจสอบ)
วิ่ง:
sudo iptables -L
ตามค่าเริ่มต้นใน Ubuntu ผลลัพธ์ที่ได้จะเป็นดังนี้:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
นี่เป็นนโยบายที่อนุญาตได้ง่ายโดยพื้นฐานแล้วเทียบเท่ากับการไม่ใช้ไฟร์วอลล์ (แน่นอนถ้าโมดูลไฟร์วอลล์ netfilter ไม่ได้รวบรวมไว้ในเคอร์เนลของคุณระบบของคุณจะทำงานในลักษณะเดียวกันกับการตั้งค่าข้างต้นแม้ว่าiptables
คำสั่งซึ่งnetfilter
การตั้งค่าแบบสอบถามจะไม่ทำงานแน่นอน)
หากการกำหนดค่าของคุณไม่เป็นเช่นนั้นให้อ่านman iptables
เพื่อหาว่าพวกเขากำลังทำอะไรและ / หรือแก้ไขคำถามของคุณ (หรือถ้าคุณเป็นคนอื่นที่มีปัญหาคล้ายกันที่อ่านข้อความนี้ให้โพสต์คำถามใหม่) เพื่อรวม พวกเขา โปรดทราบว่าiptables
กฎของคุณอาจเปิดเผยข้อมูลที่ละเอียดอ่อนเกี่ยวกับการกำหนดค่าของคุณ โดยทั่วไปการพูดแบบนี้ไม่ใช่กรณี - โดยมีข้อยกเว้นที่เป็นไปได้ของกฎเกี่ยวกับโฮสต์ที่ถูกบล็อกหรือหากการกำหนดค่าของคุณไม่ดี / ไม่ปลอดภัย - โดยทั่วไปแล้วประโยชน์ของข้อมูลนี้ต่อผู้โจมตีโดยเฉพาะอย่างยิ่งสำหรับเครื่อง LAN ที่บ้าน / ที่ทำงานด้านหลังเราเตอร์ NATนั้นมีน้อย