วิธีทำให้ OpenVPN ฟังทั้งพอร์ต TCP และ UDP


13

ฉันค้นหาไปรอบ ๆ และสิ่งเดียวที่ฉันพบคือ"ใช่ OpenVPN รองรับการเชื่อมต่อผ่าน TCP"แต่ฉันไม่พบวิธีที่จะบีบบังคับเซิร์ฟเวอร์ openvpn เพื่อฟังพอร์ตเดียวกันสำหรับโปรโตคอลทั้งสองในเวลาเดียวกัน . ฉันได้พบคำแนะนำเก่า ๆ เกี่ยวกับการสร้างอินเทอร์เฟซแบบแตะหรือแนะนำให้มีอินสแตนซ์อื่นของเซิร์ฟเวอร์ที่มีการกำหนดค่าแบบเดียวกันทำงานในเวลาเดียวกัน อดีตดูเหมือนซับซ้อนเกินไปสำหรับบางสิ่งที่ง่ายและในภายหลังดูเหมือนล้าสมัย

คำตอบ:


11

กระบวนการ openvpn เดียวกันไม่สามารถฟังบนซ็อกเก็ต UDP และ TCP ในเวลาเดียวกัน

คุณมีสองตัวเลือกที่ดี:

  1. ใช้สองอินเตอร์เฟสการแตะสำหรับ openvpn มีกระบวนการเซิร์ฟเวอร์ openvpn สองกระบวนการหนึ่งรายการสำหรับแต่ละอินเตอร์เฟสอินเตอร์เฟส หนึ่งควรฟังบน UDP อื่น ๆ บน TCP เชื่อมอินเตอร์เฟซการแตะทั้งสองนี้บนเซิร์ฟเวอร์

  2. ใช้สองอินเตอร์เฟส tun สิ่งเหล่านี้ไม่สามารถเชื่อมโยงได้ดังนั้นหากคุณต้องการแชร์พื้นที่ IP ระหว่างไคลเอนต์ TCP และ UDP คุณจะต้องใช้learn-addressสคริปต์แบบที่http://thomas.gouverneur.name/2014/02/openvpn- Listen-on-tcp-and-udp-with-tun / (อย่างไรก็ตามสคริปต์เฉพาะนี้มีความเสี่ยงต่อการโจมตี / tmp symlink ดังนั้นให้ลบการบันทึกไปยัง / tmp หากคุณใช้)

ตัวเลือกที่สามคือเพียงเรียกใช้สองอินสแตนซ์ openvpn และกำหนดพื้นที่ IP ของไคลเอ็นต์แยกต่างหากให้กับทั้งสอง (ตัวอย่างเช่นหนึ่ง / 25 จากซับเน็ตเดียวกัน / 24 แต่ละรายการ) วิธีนี้จะช่วยหลีกเลี่ยงการเชื่อมโยงและความต้องการสคริปต์การเรียนรู้

แก้ไข: เนื่องจากฉันต้องการสคริปต์เรียนที่อยู่เช่นนั้นฉันจึงเขียน ฉันวางไว้ในโดเมนสาธารณะ

#!/bin/sh
#
# This script allows an openvpn server with several openvpn instances that
# use tun interfaces to share client IP space by adjusting the routing table
# to create entries towards specific clients as needed

action="$1"
addr="$2"
cn="$3" # not used, but it's there; you could e.g. log it

case "$action" in
        add)
                echo "sudo ip ro add $addr/32 dev $dev" >&2
                exec sudo ip ro add $addr/32 dev $dev
                ;;
        delete)
                echo "sudo ip ro del $addr/32 dev $dev" >&2
                sudo ip ro del $addr/32
                exit 0 # ignore errors
                ;;
        update)
                echo "sudo ip ro change $addr/32 dev $dev" >&2
                exec sudo ip ro change $addr/32 dev $dev
                ;;
esac

สคริปต์นี้บันทึกไปยัง stderr ซึ่งควรจบลงในบันทึก openvpn


4

หากคุณต้องการให้เซิร์ฟเวอร์ OpenVPN ของคุณฟังพอร์ต TCP แทนพอร์ต UDP ให้ใช้proto tcpแทนproto udp(หากคุณต้องการให้ OpenVPN ฟังทั้งพอร์ต UDP และ TCP คุณจะต้องใช้งานอินสแตนซ์ OpenVPN แยกกันสองตัว)

คุณหมายถึงหน้านี้ล้าสมัยหรือไม่?

ฉันคิดว่าคุณสามารถเรียกใช้เซิร์ฟเวอร์ OpenVPN สองแห่ง (หนึ่งตัวสำหรับ TCP หนึ่งตัวสำหรับ UDP) เชื่อมต่อแต่ละเซิร์ฟเวอร์ด้วย TUN แล้วเชื่อมต่อ TUNs


1
tunอินเตอร์เฟสไม่มีเลเยอร์ MAC และดังนั้นจึงไม่สามารถเป็นสมาชิกของบริดจ์ได้ หากคุณต้องการเชื่อมโยงคุณจะต้องใช้tapส่วนต่อประสาน
András Korn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.