Score:2

จะเชื่อมต่ออุปกรณ์ TAP กับเครือข่ายซ้อนทับได้อย่างไร

ธง pe

ฉันต้องการอนุญาตให้ผู้ใช้ OpenVPN เข้าถึงคอนเทนเนอร์ Docker ทั้งหมดที่เป็นส่วนหนึ่งของเครือข่ายโอเวอร์เลย์ราวกับว่าอยู่ใน LAN เดียวกัน ตัวอย่างที่ง่ายที่สุดคือ 3 คอนเทนเนอร์กระจายบน 2 โฮสต์ และโฮสต์เชื่อมต่อผ่านเครือข่ายโอเวอร์เลย์ และคอนเทนเนอร์ทั้ง 3 เป็นส่วนหนึ่งของเครือข่ายโอเวอร์เลย์นั้น

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

จนถึงตอนนี้ เมื่อผู้ใช้ OpenVPN ของฉันเชื่อมต่อกับ OpenVPN และพยายาม ping Dummy Container 1 (ซึ่งอยู่บนโฮสต์เดียวกันกับคอนเทนเนอร์ OpenVPN) ผู้ใช้สามารถ ping Dummy Container 1 ได้ (และแน่นอนว่าสามารถ ping คอนเทนเนอร์ OpenVPN ได้ อีกด้วย). จนถึงตอนนี้ดีมาก!

อย่างไรก็ตาม ผู้ใช้ไม่สามารถ ping Dummy Container 2 ซึ่งมีอยู่บน แตกต่าง โฮสต์ (แต่เป็นส่วนหนึ่งของการซ้อนทับเดียวกันกับคอนเทนเนอร์ OpenVPN ตามที่กล่าวไว้ข้างต้น)

กล่าวโดยย่อคือ ผู้ใช้ VPN ที่เชื่อมต่อกับคอนเทนเนอร์ OpenVPN (เชื่อมต่อกับเครือข่ายโอเวอร์เลย์ของ Docker) และพยายาม ping คอนเทนเนอร์อื่น ๆ จะสามารถ ping คอนเทนเนอร์บนโฮสต์เดียวกันเท่านั้น ไม่ใช่บนโฮสต์อื่น ราวกับว่าการบริดจ์จะทำงานบนโลคัลเท่านั้น บริดจ์และไม่ใช่กับเครือข่ายโอเวอร์เลย์

สิ่งสำคัญคือต้องบอกด้วยว่าจากภายในคอนเทนเนอร์ OpenVPN เอง ฉันสามารถ ping Dummy Container 2 ได้ (และแน่นอนว่า Dummy Container 1 ด้วย)

ตัวเลขนี้เชื่อมโยงเรื่องราวทั้งหมดที่ฉันบอกไว้ข้างต้น สังเกตลูกศรสีแดงที่แสดงถึงการเชื่อมต่อที่ฉันต้องการบรรลุ แต่ไม่สามารถใช้งานได้ในขณะนี้ (ผู้ใช้ VPN เชื่อมต่อกับโฮสต์ 1 ผ่าน OpenVPN จากนั้นลอง ping Dummy Container 2)

ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลทางเทคนิคโดยละเอียด

คอนเทนเนอร์ OpenVPN
/etc/openvpn # ไอพีแอดเดรส
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 ตลอดไป
2: tap0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ 06:9b:33:89:85:81 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 02:42:0a:08:00:04 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.4/24 ขอบเขต global br0
       valid_lft ตลอดไป reserved_lft ตลอดไป
74: eth0@if75: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 สถานะเริ่มต้นของกลุ่ม UP
    ลิงค์/อีเธอร์ 02:42:0a:08:00:04 brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 0
76: eth1@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue สถานะเริ่มต้นของกลุ่ม UP
    ลิงค์/อีเธอร์ 02:42:ac:12:00:04 brd ff:ff:ff:ff:ff:ff ลิงค์-netnsid 1
    inet 172.18.0.4/16 brd 172.18.255.255 ขอบเขต global eth1
       valid_lft ตลอดไป reserved_lft ตลอดไป
/etc/openvpn # เส้นทาง ip
ค่าเริ่มต้นผ่าน 172.18.0.1 dev eth1
10.8.0.0/24 dev br0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.8.0.4
172.18.0.0/16 dev eth1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 172.18.0.4

การกำหนดค่าเซิร์ฟเวอร์ OpenVPN:

พอร์ต 1194
โปรโตคอล udp
ผู้พัฒนา tap0
แคลิฟอร์เนีย ca.crt
ใบรับรอง server.crt
คีย์ server.key # ไฟล์นี้ควรเก็บเป็นความลับ
dh dh.pem
ifconfig-pool-persist ipp.txt
ลูกค้าต่อลูกค้า
รักษาชีวิต 10 120
รหัส AES-256-GCM
บีบอัด lz4-v2
กด "บีบอัด lz4-v2"
คีย์คงอยู่
คงอยู่-tun
สถานะ /var/log/openvpn-status.log
กริยา 3
แจ้งออกอย่างชัดเจน 1

##### การรับรองความถูกต้อง #####
# ไม่จำเป็นต้องมีใบรับรองลูกค้า ลูกค้าจำเป็นต้องตรวจสอบโดยใช้ชื่อผู้ใช้/รหัสผ่านเท่านั้น
ตรวจสอบใบรับรองลูกค้าไม่มี
# ปิดใช้งานการเจรจาใหม่ของคีย์ ค่าเริ่มต้นคือหนึ่งชั่วโมง ซึ่งจะตัดการเชื่อมต่อผู้ใช้ทุกๆ ชั่วโมง และทำให้ผู้ใช้ปลายทางถูกท้าทายให้อนุญาตอีกครั้งโดยใช้ OTP ใหม่
reneg วินาที 0
# โหลดและใช้การกำหนดค่าปลั๊กอิน LDAP
ปลั๊กอิน /usr/lib/openvpn/plugins/openvpn-auth-ldap.so /etc/openvpn/auth-ldap.conf
# โหลดและใช้ปลั๊กอิน PAM-auth (สำหรับ 2FA เป็นหลัก)
ปลั๊กอิน /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so "openvpn เข้าสู่ระบบ รหัสผ่าน USERNAME PASSWORD PIN OTP"

Briding ทำได้ดังนี้:

openvpn --mktun --dev tap0
ip link ตั้ง tap0 promisc ขึ้น

ip link เพิ่มชื่อ br0 ชนิดบริดจ์
ลิงค์ ip ตั้งค่า dev br0 ขึ้น
ip link ตั้งค่า dev tap0 master br0
ip link ตั้ง dev eth0 master br0
ip addr ล้าง dev eth0
ip addr เพิ่ม 10.8.0.4/24 dev br0

OpenVPN เริ่มต้นโดยใช้คำสั่ง

VPN_SERVER_HOST_IP_ADDRESS=10.8.0.254
VPN_NETMASK=255.255.255.0
VPN_POOL_START_IP_ADDRESS=10.8.0.50
VPN_POOL_END_IP_ADDRESS=10.8.0.100

openvpn \
    --config server.conf \
    --สะพานเซิร์ฟเวอร์ $VPN_SERVER_HOST_IP_ADDRESS $VPN_NETMASK $VPN_POOL_START_IP_ADDRESS $VPN_POOL_END_IP_ADDRESS

My Dummy Container 2 (คล้ายกับ Dummy Container 1 แต่มี IP ต่างกัน):

/ # ไอพีแอดเดรส
1: จริง: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    ลิงค์ / ย้อนกลับ 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 ขอบเขตโฮสต์ lo
       valid_lft ตลอดไป reserved_lft ตลอดไป
35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue สถานะ UP
    ลิงค์/อีเธอร์ 02:42:0a:08:00:05 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.5/24 brd 10.8.0.255 ขอบเขต global eth0
       valid_lft ตลอดไป reserved_lft ตลอดไป
37: eth1@if38: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue สถานะ UP
    ลิงค์/อีเธอร์ 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 ขอบเขต global eth1
       valid_lft ตลอดไป reserved_lft ตลอดไป
/ # เส้นทางไอพี
ค่าเริ่มต้นผ่าน 172.18.0.1 dev eth1
10.8.0.0/24 dev eth0 ลิงค์ขอบเขต src 10.8.0.5
172.18.0.0/16 dev eth1 ลิงค์ขอบเขต src 172.18.0.3
vidarlo avatar
ar flag
คุณต้องการการเชื่อมต่อ L2 หรือไม่? ถ้าไม่ การแตะและการเชื่อมต่อคือ *เสมอ* คำตอบที่ผิด
Mohammed Noureldin avatar
pe flag
@vidarlo ใช่ฉันต้องการมัน ส่วนใหญ่ฉันจะมีตัวควบคุมโดเมนบนโฮสต์อื่น ซึ่งอาจตอบสนองความต้องการ L2 บางอย่าง เช่น เครื่องพิมพ์ เป็นต้น
vidarlo avatar
ar flag
ตัวควบคุมโดเมนและเครื่องพิมพ์ไม่ต้องการการเชื่อมต่อ L2 พวกเขาทำงานได้ดีกว่า L3 โดยทั่วไป L2 จะบอกเป็นนัยว่าคุณต้องการทราฟฟิกที่ไม่ใช่ TCP/IP
Mohammed Noureldin avatar
pe flag
@vidarlo ขอบคุณสำหรับข้อมูลนั้น ฉันเพิ่งอ่านเจอว่าเครื่องพิมพ์บางรุ่นอาจมีปัญหาหากไม่ได้ใช้งานใน L2 อย่างไรก็ตาม มันน่าสนใจถ้าฉันสามารถเข้าใจว่าทำไมมันถึงไม่ทำงานโดยใช้การตั้งค่านี้
Mohammed Noureldin avatar
pe flag
@vidarlo คุณช่วยดูรายละเอียดใหม่และแจ้งให้เราทราบหากคุณสามารถเข้าใจได้ว่ามีอะไรผิดปกติและเหตุใดฉันจึงไม่สามารถ ping คอนเทนเนอร์บนโฮสต์ 2 โดยผู้ใช้ VPN ได้

โพสต์คำตอบ

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