สามารถตั้งค่า Listen_addresses เป็นรายการได้จริงหรือ


32

ฉันมี VM ที่มีที่อยู่ IP 192.168.0.192 กำลังเรียกใช้ postgreSQL

ถ้าฉันระบุ

listen_addresses = '*'

จากนั้นฉันสามารถเชื่อมต่อจาก VM อื่นที่ 192.168.0.191 และจาก localhost

แต่ฉันไม่สามารถใช้รายการเพื่อบอก postgreSQL ให้ใช้ที่อยู่ทั้งสองนั้นได้ หากฉันเปลี่ยน Listen_addresses เป็นรายการ:

listen_addresses = '192.168.0.191, localhost'

ฉันจะไม่สามารถเชื่อมต่อจาก 192.168.0.191 อีกต่อไป

ฉันสังเกตเห็นว่าตัวอย่างเกือบทั้งหมดใน stackexchange ตั้งค่า Listen_addresses เป็น '*' นี่เป็นเพราะแบบฟอร์มรายการไม่ทำงานหรือไม่

คำตอบ:


45

ใช่listen_addressesสามารถตั้งค่าเป็นรายการที่อยู่บนโลคัลโฮสต์เพื่อเชื่อมโยงสำหรับการฟัง

ในตัวอย่างของคุณ:

Listen_addresses = '192.168.0.191, localhost'

หากเครื่องโลคัลมี IP 192.168.0.192คุณควรระบุ IP นั้นไม่ใช่192.168.0.191IP ของโฮสต์ระยะไกล PostgreSQL ไม่สามารถผูกกับที่อยู่ IP ของโฮสต์ระยะไกล

คุณไม่ได้พูดว่า "ใครได้รับอนุญาตให้เชื่อมต่อ" คุณกำลังพูดว่า "อินเทอร์เฟซใดที่ PostgreSQL ควรยอมรับการเชื่อมต่อ" "การที่ได้รับอนุญาตให้เชื่อมต่อ" pg_hba.confบิตถัดไปและมีการกำหนดค่าใน

ดังนั้น: '192.168.0.192, localhost'ลอง หรือเพียง*เพราะคุณอาจต้องการฟังบนอินเทอร์เฟซเครือข่ายทั้งหมด


1
มันได้ผล. ดังนั้นจึงมีความแตกต่างในทางปฏิบัติระหว่างรายการและ '*' หรือไม่?
zabouti

10
@zabouti แน่นอน หากเซิร์ฟเวอร์ของคุณมี (พูด) สองอินเทอร์เฟซเครือข่ายภายนอกคุณสามารถบอก PostgreSQL ให้ผูกกับหนึ่งในนั้นดังนั้นจึงไม่สามารถทำการเชื่อมต่อ TCP กับ Pg ที่อื่นได้ ส่วนใหญ่เป็นการรักษาความปลอดภัยระดับพิเศษสำหรับระบบที่มีหลายอินเตอร์เฟสไปยังโดเมนความปลอดภัยที่แตกต่างกัน ค่อนข้างมีประโยชน์เมื่อใช้ร่วมกับ VLANs, สวิตช์เสมือน ฯลฯ การใช้งานทั่วไปส่วนใหญ่คือการตั้งค่าไว้เพื่อlocalhostให้การเชื่อมต่อ TCP / IP ไม่สามารถทำได้จากอินเทอร์เฟซเครือข่ายภายนอกใด ๆ
Craig Ringer

1
@ CraigRinger: คำตอบที่ดีมาก!
ฟรังก์

@ CraigRinger คุณควรเพิ่มความคิดเห็นเหล่านั้นในคำตอบของคุณ นั่นเป็นข้อมูลที่มีประโยชน์มาก
João Portela

1
ใช่ฉันคิดว่าความคิดเห็นอาจดีกว่าคำตอบ ร็อคกับเครก!
Darth Egregious

2

ฉันพบว่าแทนที่จะlocalhostต้องใช้127.0.0.1หากคุณกำลังระบุที่อยู่อื่นด้วย

ดังนั้นในกรณีของการฟังที่อยู่ IP ของโฮสต์ Docker รวมถึง localhost แต่ไม่ใช่ IP ภายนอกสิ่งนี้จะไม่ทำงาน (ฉันได้รับการเชื่อมต่อที่ถูกปฏิเสธจากภายในคอนเทนเนอร์ Docker ของฉัน):

listen_addresses = '172.17.0.1, localhost'

แต่สิ่งนี้จะ:

listen_addresses = '172.17.0.1, 127.0.0.1'

0

รายการ 0.0.0.0 อนุญาตให้รับฟังที่อยู่ IPv4 ทั้งหมดและ :: อนุญาตให้รับฟังที่อยู่ IPv6 ทั้งหมด หากรายการว่างเปล่าเซิร์ฟเวอร์จะไม่ฟังบนอินเทอร์เฟซ IP ใด ๆ เลยซึ่งในกรณีนี้จะใช้เฉพาะซ็อกเก็ต Unix-domain เพื่อเชื่อมต่อกับมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.