Ping: sendmsg: การดำเนินการไม่ได้รับอนุญาตข้อผิดพลาดหลังจากติดตั้ง iptables บน Arch GNU / Linux


15

เมื่อวานนี้ฉันมีคอมพิวเตอร์เครื่องใหม่เป็น homeserver ของฉัน HP Proliant Microserver ติดตั้ง Arch Linux บนแล้วพร้อมเคอร์เนลเวอร์ชัน 3.2.12

หลังจากติดตั้ง iptables (1.4.12.2 - รุ่นปัจจุบัน AFAIK) และเปลี่ยนnet.ipv4.ip_forwardคีย์เป็น 1 และเปิดใช้งานการส่งต่อในไฟล์กำหนดค่า iptables (และการรีบูต) ระบบจะไม่สามารถใช้อินเตอร์เฟสเครือข่ายใด ๆ Ping ล้มเหลวด้วย

Ping: sendmsg: operation not permitted

หากฉันลบ iptables อย่างสมบูรณ์ระบบเครือข่ายก็ใช้ได้ แต่ฉันต้องแบ่งปันการเชื่อมต่ออินเทอร์เน็ตกับเครือข่ายท้องถิ่น

eth0 - wan NIC รวมอยู่บนเมนบอร์ด (Broadcom NetXtreme BCM5723)

eth1 - lan NIC ในสล็อต pci-express (Intel 82574L Gigabit Network)

เนื่องจากมันทำงานโดยไม่มี iptables (เซิร์ฟเวอร์สามารถเข้าถึงอินเทอร์เน็ตและฉันสามารถเข้าสู่ระบบด้วย ssh จากเครือข่ายภายใน) ฉันคิดว่ามันมีบางอย่างที่เกี่ยวข้องกับ iptables ฉันไม่มีประสบการณ์มากกับ iptables ดังนั้นฉันจึงใช้สิ่งเหล่านี้เป็นข้อมูลอ้างอิง (แยกจากกันแน่นอน ... ):

wiki.archlinux.org/index.php/Simple_stateful_firewall#Setting_up_a_NAT_gateway

revsys.com/writings/quicktips/nat.html

howtoforge.com/nat_iptables

บนเซิร์ฟเวอร์ก่อนหน้าของฉันฉันใช้คู่มือ revsys เพื่อตั้งค่า nat ทำงานเหมือนมีเสน่ห์

ใครเคยมีประสบการณ์แบบนี้มาก่อน? ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


23

ข้อความแสดงข้อผิดพลาด:

Ping: sendmsg: operation not permitted

หมายความว่าเซิร์ฟเวอร์ของคุณไม่ได้รับอนุญาตให้ส่งแพ็คเก็ต ICMP คุณต้องอนุญาตให้เซิร์ฟเวอร์ของคุณส่งทราฟฟิกผ่านหนึ่งอินเตอร์เฟสที่กำหนดค่าไว้ คุณสามารถทำได้โดย:

  1. ตั้งOUTPUTนโยบายลูกโซ่เป็นACCEPTเพื่ออนุญาตการรับส่งข้อมูลขาออกทั้งหมดจากกล่องของคุณ:

    sudo iptables -P OUTPUT ACCEPT
    
  2. ตั้งค่าOUTPUTนโยบายลูกโซ่เป็นDROPแล้วอนุญาตประเภทการรับส่งข้อมูลที่คุณต้องการ

สิ่งนี้ใช้กับโซ่ทั้งหมดไม่เพียง แต่OUTPUTโซ่ INPUTโซ่ควบคุมการรับส่งข้อมูลจากกล่องของคุณ FORWARDข้อเสนอห่วงโซ่ที่มีปริมาณการใช้ส่งต่อผ่านกล่อง


Ping เป็นเพียงตัวอย่างไม่สามารถส่ง udp packets หรือ tcp packets ...
estol

แม้ว่าแนวคิดเดียวกันจะมีผลบังคับใช้
Khaled

พยายามในสิ่งที่คุณพูดผลลัพธ์เดียวกัน มีกฎจากเซิร์ฟเวอร์เก่าซึ่งใช้งานได้บางส่วน ไคลเอนต์ใด ๆ สามารถค้นหาชื่อโดเมนแม้จะสามารถ ping ได้ แต่ไม่สามารถเรียกดูเว็บได้ ฉันติดตั้งพร็อกซีเป็นวิธีแก้ปัญหา (เนื่องจากการเชื่อมต่อบนเซิร์ฟเวอร์ดีเหมือนการเชื่อมต่อกับเซิร์ฟเวอร์) แต่บริการจำนวนมากไม่ทำงาน (Trillian, Skype) ด้วยวิธีนี้
estol

คำสั่งในการตั้งค่านโยบายลูกโซ่ผลลัพธ์ให้ยอมรับคืออะไร
Joseph Astrahan

4
@JosephAstrahan:sudo iptables -P OUTPUT ACCEPT
Khaled

2

สำหรับฉันใน Debian 9 มันช่วยเพียงติดตั้งใหม่ping:

apt-get install --reinstall iputils-ping 

ยังทำงานบน CentOS 7 (อัพเกรดแพคเกจจริง ๆyum upgrade iputils.x86_64) หลังจากการโคลนระบบปฏิบัติการ "ทางกายภาพ" ไปเป็น VM - ไม่แน่ใจว่ามีความสำคัญหรือไม่
yahol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.