Score:5

ใช้การส่งต่อ iptables ในขณะที่รักษา IP ต้นทางอย่างเหมาะสม

ธง ng

ฉันมีเซิร์ฟเวอร์ที่ใช้งาน Wireguard (จึงต้องใช้ สวมหน้ากาก) และคอนเทนเนอร์ที่ทำงานบนพอร์ต 2525

ฉันมีดังต่อไปนี้ iptables กฎ:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.1:2525
iptables -t nat -A โพสต์ -o eth0 -j MASQUERADE

เมื่อเชื่อมต่อกับ เซิร์ฟเวอร์:2525 คอนเทนเนอร์ Docker สามารถดูที่อยู่ IP จริงของฉันได้โดยตรง (1.2.3.4). เมื่อเชื่อมต่อกับพอร์ต เซิร์ฟเวอร์:25คอนเทนเนอร์ Docker มองเห็น IP ภายในเครื่องที่ให้บริการโดย เครือข่ายนักเทียบท่า:

07 เม.ย. 12:45:46 mx postfix/smtpd[87]: ขาดการเชื่อมต่อหลังจาก CONNECT จากที่ไม่รู้จัก [172.18.0.1]
07 เม.ย. 12:45:46 mx postfix/smtpd[87]: ตัดการเชื่อมต่อจากคำสั่งที่ไม่รู้จัก [172.18.0.1] = 0/0

ฉันจะแน่ใจได้อย่างไรว่าคอนเทนเนอร์ Docker เห็นที่อยู่ IP สาธารณะอย่างถูกต้องขณะเชื่อมต่อกับพอร์ต 25 (และไม่ใช่เฉพาะเมื่อเชื่อมต่อกับพอร์ต 2525)

ขอบคุณ

# iptables -L -n -v -t แนท
CHAIN ​​PREROUTING (นโยบายยอมรับ 0 แพ็คเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
52300 3131K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 ถึง:172.18.0.1:2525
 150K 8524K DOCKER ทั้งหมด -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE ตรงกับ dst-type LOCAL

Chain INPUT (นโยบายยอมรับ 0 แพ็กเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง

Chain OUTPUT (นโยบายยอมรับ 0 แพ็คเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
    2 120 DOCKER ทั้งหมด -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE ตรงกับ dst-type LOCAL

Chain POSTROUTING (นโยบายยอมรับ 0 แพ็คเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
 3385 256K MASQUERADE ทั้งหมด -- * !docker0 172.17.0.0/16 0.0.0.0/0
1733K 104M สวมหน้ากากทั้งหมด -- * !br-b147ffdbc9f3 172.18.0.0/16 0.0.0.0/0
    0 0 สวมหน้ากาก tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:53
    0 0 สวมหน้ากาก udp -- * * 172.17.0.2 172.17.0.2 udp dpt:53
    0 0 สวมหน้ากาก tcp -- * * 172.18.0.2 172.18.0.2 tcp dpt:25

Chain DOCKER (ข้อมูลอ้างอิง 2 รายการ)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
   12 1419 ส่งคืนทั้งหมด -- นักเทียบท่า0 * 0.0.0.0/0 0.0.0.0/0
    0 0 คืนทั้งหมด -- br-b147ffdbc9f3 * 0.0.0.0/0 0.0.0.0/0
   56 3192 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5354 ถึง:172.17.0.2:53
    0 0 DNAT udp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:5354 ถึง:172.17.0.2:53
  107 6020 DNAT tcp -- !br-b147ffdbc9f3 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2525 ถึง:172.18.0.2:25
#ไอพีแอดเดรส
1: จริง: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1,000
    ลิงค์ / ย้อนกลับ 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 ขอบเขตโฮสต์ lo
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 :: โฮสต์ขอบเขต 1/128
       valid_lft ตลอดไป reserved_lft ตลอดไป
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 32:d0:56:15:0a:64 brd ff:ff:ff:ff:ff:ff
    ชื่อสำรอง enp0s3
    ชื่อสำรอง ens3
    inet 159.223.80.86/20 brd 159.223.95.255 ขอบเขต global eth0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet 10.15.0.19/16 brd 10.15.255.255 ขอบเขต global eth0:1
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 2400:6180:0:d0::f57:6001/64 ขอบเขตทั่วโลก
       valid_lft ตลอดไป reserved_lft ตลอดไป
    ลิงค์ขอบเขต inet6 fe80::30d0:56ff:fe15:a64/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ 32:dc:4a:e4:27:be brd ff:ff:ff:ff:ff:ff
    ชื่ออื่น enp0s4
    ชื่อสำรอง ens4
    inet 10.130.244.15/16 brd 10.130.255.255 ขอบเขต global eth1
       valid_lft ตลอดไป reserved_lft ตลอดไป
    ลิงค์ขอบเขต inet6 fe80::30dc:4aff:fee4:27be/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1000
    ลิงค์/ไม่มี
    inet 10.200.200.52/24 ขอบเขต global wg0
       valid_lft ตลอดไป reserved_lft ตลอดไป
5: wg1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/ไม่มี
    inet 10.222.111.1/24 ขอบเขต global wg1
       valid_lft ตลอดไป reserved_lft ตลอดไป
6: br-b147ffdbc9f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state ค่าเริ่มต้นของกลุ่ม
    ลิงค์/อีเธอร์ 02:42:46:21:70:c0 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 ขอบเขตทั่วโลก br-b147ffdbc9f3
       valid_lft ตลอดไป reserved_lft ตลอดไป
    ลิงค์ขอบเขต inet6 fe80::42:46ff:fe21:70c0/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
7: นักเทียบท่า 0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state ค่าเริ่มต้นของกลุ่ม
    ลิงค์/อีเธอร์ 02:42:66:22:41:91 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 ขอบเขต global docker0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::42:66ff:fe22:4191/64 ลิงค์ขอบเขต
       valid_lft ตลอดไป reserved_lft ตลอดไป
9: veth31eff9d@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 สถานะเริ่มต้นของกลุ่ม UP
    ลิงค์/อีเธอร์ e6:fb:80:5d:c7:a3 brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 0
    ลิงค์ขอบเขต inet6 fe80::e4fb:80ff:fe5d:c7a3/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
19: veth01269f5@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-b147ffdbc9f3 สถานะเริ่มต้นของกลุ่ม UP
    ลิงค์/อีเธอร์ 36:f4:e7:43:5f:da brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 2
    ลิงค์ขอบเขต inet6 fe80::34f4:e7ff:fe43:5fda/64
       valid_lft ตลอดไป reserved_lft ตลอดไป
setenforce 1 avatar
us flag
ดูเหมือนว่าคุณมีกฎ postrouting ของ SNAT เมื่อไปที่อินเทอร์เฟซนักเทียบท่า ซึ่งคุณสามารถลบได้ คุณช่วยเพิ่มผลลัพธ์ของ `iptables -L -n -v -t nat` ได้ไหม
eKKiM avatar
lr flag
คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับโครงสร้างพื้นฐาน/การตั้งค่าเครือข่ายของคุณ รวมถึงส่วน wireguard ได้หรือไม่ ฉันไม่ชัดเจนสำหรับฉัน (ในขณะนี้) ว่าทำไมต้องสวมหน้ากาก
ng flag
@setenforce1 เพิ่มในโพสต์เริ่มต้น
ng flag
@eKKiM ฉันเชื่อว่าจำเป็นต้องกำหนดเส้นทางอย่างถูกต้อง (เช่น ทำหน้าที่เป็นเกตเวย์/VPN: ลูกค้า -> เซิร์ฟเวอร์ WG -> อินเทอร์เน็ต)
eKKiM avatar
lr flag
เซิร์ฟเวอร์ WG เป็นเกตเวย์เริ่มต้นของคุณในเครือข่ายของคุณด้วยหรือไม่ คุณสามารถเพิ่มผลลัพธ์ของ `ifconfig -a` หรือ `ip addr` ได้หรือไม่
ng flag
ไม่ มันเป็นเซิร์ฟเวอร์ดิจิทัลในมหาสมุทร eth0 มี IP สาธารณะ เพิ่ม `ip addr` ในโพสต์ต้นทาง
eKKiM avatar
lr flag
ฉันไม่เห็นเหตุผลสำหรับกฎการสวมหน้ากากของ POSTROUTING ทั้งหมด คุณช่วยแทนที่ด้วย `iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` เดียวได้ไหม
ng flag
ฉันลบออก ฉันมีสิ่งนี้: ``` ip6tables -A INPUT -i eth0 -m tcp -p tcp --dport 25 -j ปฏิเสธ ip6tables -A INPUT -i eth0 -m tcp -p tcp --dport 2525 -j ปฏิเสธ iptables -t nat -A โพสต์ -o eth0 -j MASQUERADE ```
Score:2
ธง cl
A.B

เพียงแค่ให้ Docker จัดการกับการเปลี่ยนเส้นทาง ซึ่งเป็นแบบไดนามิกและสามารถเปลี่ยนแปลงได้เมื่อมีการเพิ่ม ลบ หรือรีสตาร์ทคอนเทนเนอร์ แต่ดู อัปเดต ด้านล่าง.

การเปลี่ยนเส้นทางนี้ไม่ควรเป็น 172.18.0.1 ซึ่งเป็นโฮสต์ไม่ใช่คอนเทนเนอร์ เมื่อโฮสต์ได้รับการเชื่อมต่อดังกล่าว มันจะถูกจัดการโดย นักเทียบท่าพร็อกซี ซึ่งพร็อกซีไปยังคอนเทนเนอร์ ทำให้สูญเสียที่อยู่ IP ต้นทางในกระบวนการ

นักเทียบท่า DNAT + กำหนดเส้นทางพอร์ตนี้อย่างถูกต้องแล้ว (ยกเว้นจากโฮสต์เอง โดยที่ นักเทียบท่าพร็อกซี มีบทบาทนี้) ในกฎสุดท้ายของชุดกฎ ไปยังคอนเทนเนอร์ที่รันด้วยแอดเดรส 172.18.0.2 ยกเว้นมีการกำหนดค่าให้ใช้พอร์ต 2525 แทนที่จะเป็นพอร์ต 25

  107 6020 DNAT tcp -- !br-b147ffdbc9f3 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2525 ถึง:172.18.0.2:25

ควรแก้ไขด้วยการตั้งค่า Docker ไม่ใช่ด้วยตนเอง iptables กฎที่ไม่สามารถเปลี่ยนแปลงได้เมื่อใดก็ตามที่มีการเปลี่ยนแปลงรูปแบบคอนเทนเนอร์ เนื่องจากพอร์ต 25 ได้รับสิทธิพิเศษ หาก Docker ทำงานแบบไม่มีรูท จำเป็นต้องตั้งค่าเพิ่มเติม โปรดตรวจสอบ เอกสารเกี่ยวกับการเปิดเผยพอร์ตพิเศษ.


อัปเดต (ปัจจัยในความคิดเห็นของ OP): OP ไม่สามารถใช้งานได้ในขณะนี้ -หน้า 25:25 เพราะ นักเทียบท่าพร็อกซี ปะทะกับเซิร์ฟเวอร์ SMTP ของโฮสต์ในพื้นที่และแข่งขันกันเพื่อฟังพอร์ต 25 บนโฮสต์ นั่นเป็นเหตุผลที่เริ่มต้น (ผิด) iptables การเปลี่ยนเส้นทางทำโดย OP

หนึ่งสามารถ:

  • ปิดใช้งานทั่วโลก นักเทียบท่าพร็อกซี ด้วยการวิ่ง นักเทียบท่า ด้วยคุณสมบัติ userland-พร็อกซี ตั้งค่าเป็นเท็จ

    ไม่ว่าจะเป็นก พารามิเตอร์ --userland-proxy=false หรือเป็นทรัพย์สิน "userland-proxy": เท็จ เพิ่มไปยัง /etc/docker/daemon.json.

    จากนั้นจะอนุญาตให้ใช้ นักเทียบท่าเรียกใช้ ... -p 25:25 ... (เช่น เอกสาร) โดยไม่มีข้อขัดแย้ง: โฮสต์จะเข้าถึงตัวเองเมื่อเข้าถึง localhost หรือ $HOSTNAME ระบบระยะไกลจะเข้าถึงคอนเทนเนอร์ และไม่มี "ที่อยู่ที่ใช้งานแล้ว" จะทำให้ SMTP daemon ของโฮสต์หรือคอนเทนเนอร์ของ Docker ล้มเหลวเมื่อเริ่มต้น

  • หรือเพิ่มการเปลี่ยนเส้นทางด้วยตนเอง (ด้วยการตั้งค่าแบบยาวด้านล่างเพื่อให้ทำโดยอัตโนมัติ)

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

    สร้าง prerouting chain แยกต่างหาก (เพื่อให้สามารถล้างได้โดยไม่ต้องล้างสิ่งอื่นใด) และเรียกใช้ก่อน:

    iptables -t แนท -N mynat
    iptables -t nat -I PREROUTING -j mynat
    

    ที่อยู่ IP ของคอนเทนเนอร์สามารถเรียกคืนได้ทางโปรแกรม (สำหรับกรณีทั่วไปของคอนเทนเนอร์ชื่อ ด้วยที่อยู่เดียว):

    containerip=$(ตรวจสอบคอนเทนเนอร์นักเทียบท่า --format '{{.NetworkSettings.IPAddress}}' mx)
    

    (หรือจะใช้ เจคิว: containerip=$(คอนเทนเนอร์นักเทียบท่าตรวจสอบ mx | jq '.[].NetworkSettings.IPAddress')

    การค้นหาชื่ออินเทอร์เฟซของบริดจ์นั้นซับซ้อนกว่าหรืออย่างน้อยฉันก็ไม่พบวิธีที่จะใช้มันเพียงอย่างเดียว นักเทียบท่า ... ตรวจสอบ. ค้นหาที่อยู่ IP บนโฮสต์และค้นหาโฮสต์โดยใช้ ที่อยู่ IP เพื่อค้นหาเฉพาะอินเทอร์เฟซบริดจ์ที่มีการตั้งค่าที่อยู่ IP เฉพาะนี้ (ต้องใช้ไฟล์ เจคิว สั่งการ.)

     bridgeip=$(เครือข่ายนักเทียบท่าตรวจสอบ --format '{{(index .IPAM.Config 0).Gateway}}' mx)
     bridgeinterface=$(ที่อยู่ ip -json แสดงเป็น "$bridgeip"/32 | jq -r '.[].ifname')
    

    ล้างและเติมใหม่ นกขุนทอง ทุกครั้งที่คอนเทนเนอร์เริ่ม (ใหม่):

    iptables -t แนท -F mynat
    iptables -t แนท -A mynat ! -i "$bridgeinterface" -p tcp --dport 25 -j DNAT --to-ปลายทาง "$containerip":25
    

    ซึ่งจะเป็นกรณีปัจจุบัน:

    iptables -t แนท -I mynat ! -i br-b147ffdbc9f3 -p tcp --dport 25 -j DNAT --to-ปลายทาง 172.18.0.2:25

    และเพื่อให้แน่ใจว่ากฎไฟร์วอลล์ของนักเทียบท่าเองไม่ปิดกั้นทราฟฟิกดังกล่าว ให้ทำสิ่งที่คล้ายกันโดยเริ่มจากตัวกรอง/ซึ่งไปข้างหน้า จาก นักเทียบท่า-ผู้ใช้ โซ่.

    ในขั้นต้น (หากบูตจาก คุณอาจต้องสร้างก่อนด้วย นักเทียบท่า-ผู้ใช้):

    iptables -N myforward
    iptables -I DOCKER-USER 1 -j myforward
    

    จากนั้นในแต่ละครั้ง (ใหม่) เริ่มคอนเทนเนอร์:

    iptables -F ไปข้างหน้า
    iptables -A myforward -p tcp ! -i "$bridgeinterface" -d "$containerip" -p tcp --dport 25 -j ยอมรับ
    

    ซึ่งจะเป็นกรณีปัจจุบัน:

    iptables -A myforward -p tcp ! -i br-b147ffdbc9f3 -d 172.18.0.2 -p tcp --dport 25 -j ยอมรับ
    

หมายเหตุ:

  • หากต้องการลดความซับซ้อนของกฎข้างต้นและหลีกเลี่ยงการคำนวณบางอย่าง คอนเทนเนอร์และเครือข่ายบริดจ์สามารถเริ่มต้นด้วยที่อยู่ IP แบบคงที่ดูตัวอย่าง SO Q/A นี้: กำหนด IP แบบคงที่ให้กับคอนเทนเนอร์ Docker.

  • นี่คือ UL SE Q/A พร้อมคำตอบของฉันเกี่ยวกับปัญหาเมื่อโต้ตอบกับ Docker (เหมาะสำหรับ nftable แต่บางส่วนเกี่ยวกับ นักเทียบท่า-ผู้ใช้ ห่วงโซ่หรือ br_netfilter การโต้ตอบของสะพานยังคงเป็นที่สนใจ): นักเทียบท่ารายการที่อนุญาตพิเศษของ nftables

ng flag
ขอบคุณ. สิ่งนี้ใช้ `docker run`: `docker run -d -P --network mx -p 2525:25 -v /srv/mx/:/mx/ --restart always --name mx mx`
ng flag
ฉันกำลังทำงานบนพอร์ต 2525 เพราะหากฉันไม่เรียกใช้ postfix บน localhost คำสั่ง `mail` จะไม่ทำงานและอีเมลจะไม่ถูกส่ง https://pastebin.com/RR2mDx9T (เมื่อรันคอนเทนเนอร์บนพอร์ต 25)
eKKiM avatar
lr flag
afaik docker userland proxy จะพร็อกซีการเชื่อมต่ออย่างแท้จริงดังนั้น ip ต้นทางจะเปลี่ยนไป ..
A.B avatar
cl flag
A.B
@eKKiM แน่นอนนั่นคือสิ่งที่ฉันครอบคลุมที่ `docker-proxy`
A.B avatar
cl flag
A.B
@Tuinslak ด้วยบริบทนี้ (ไม่สามารถใช้พอร์ต 25) กฎนักเทียบท่ามีอยู่แล้ว (กฎสุดท้ายที่เห็นในชุดกฎที่แสดงในคำถามที่ใส่โดย `-p 2525:25`) จัดการแล้ว เหตุใดคุณจึงเพิ่มกฎเพื่อลบล้างมัน
eKKiM avatar
lr flag
@AB วลีของ "เพียงให้นักเทียบท่าจัดการการเปลี่ยนเส้นทาง" ให้ฉันถือว่าปล่อยให้มันได้รับการจัดการโดยนักเทียบท่าพร็อกซี
A.B avatar
cl flag
A.B
@eKKiM docker-proxy เกี่ยวข้องกับกรณีโฮสต์เท่านั้น: 172.18.0.1 ไม่เกี่ยวข้องเมื่อกำหนดเส้นทางไปยังคอนเทนเนอร์ 172.18.0.2 แต่ OP กฎ iptables ที่เพิ่มเข้ามาทำให้โฟลว์ถูกบังคับให้ใช้ docker-proxy แทนการกำหนดเส้นทาง
ng flag
หากฉันไม่เรียกใช้ `iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` แสดงว่าเซิร์ฟเวอร์ไม่ได้ส่งต่อแพ็กเก็ตและฉันไม่สามารถใช้เป็น VPN/ping โฮสต์ภายนอกเซิร์ฟเวอร์ได้ - https:// pastebin.com/uY0Rka6Z
ng flag
ดูเหมือนว่า `iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.2:25` ใช้งานได้ ดังนั้นฉันจึงไม่สามารถใช้ docker-proxy (`172.18.0.1`) แต่จำเป็นต้องใช้ IP จริงของคอนเทนเนอร์หรือไม่
A.B avatar
cl flag
A.B
ลิงก์ของฉันเกี่ยวกับ `docker-proxy` บอกว่าสามารถปิดใช้งานได้ทั่วโลกด้วย `--userland-proxy=false` หรือ `"userland-proxy": false` ใน [`/etc/docker/daemon.json`](https://docs.docker.com/engine/reference/commandline/dockerd/) หากคุณไม่ต้องเข้าถึงคอนเทนเนอร์ของคุณ (ทั้งหมดไม่ใช่แค่คอนเทนเนอร์นี้: เป็นทั่วโลก) โดยใช้โฮสต์เอง คุณก็ควรใช้ `-p 25:25` ได้ง่ายๆนี่เป็นปัญหาเฉพาะเมื่อมี NAT hairpin เข้ามาเกี่ยวข้อง ดังนั้นเมื่อคอนเทนเนอร์ต้องเข้าถึงคอนเทนเนอร์อื่นโดยใช้ที่อยู่ IP ของโฮสต์สาธารณะ (ที่อยู่ของ eth0)
A.B avatar
cl flag
A.B
คุณสามารถใช้ `172.18.0.2:25` ได้โดยไม่มีปัญหา แต่โปรดทราบว่าที่อยู่นี้ไม่ถาวร อาจเปลี่ยนแปลงได้เมื่อคุณเรียกใช้คอนเทนเนอร์อื่น ทั้งนี้ขึ้นอยู่กับการกำหนดค่า
A.B avatar
cl flag
A.B
ฉันแก้ไขคำตอบเพื่อระบุข้อมูลในความคิดเห็นและทำงานอัตโนมัติ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา