Cara membuat OpenVPN untuk mendengarkan port TCP dan UDP


13

Saya telah mencari-cari dan satu-satunya hal yang saya temukan adalah bahwa "ya, OpenVPN mendukung koneksi melalui TCP" , tetapi saya belum menemukan cara untuk memaksa server openvpn untuk mendengarkan port yang sama untuk kedua protokol pada saat yang sama . Saya telah menemukan beberapa panduan yang sangat lama tentang membuat antarmuka tap , atau merekomendasikan untuk memiliki instance server lain dengan konfigurasi yang sama berjalan pada saat yang sama. Yang pertama terlihat terlalu rumit untuk sesuatu yang sederhana, dan yang terakhir tampaknya sudah usang.

Jawaban:


11

Proses openvpn yang sama tidak dapat mendengarkan pada soket UDP dan TCP secara bersamaan.

Anda memiliki dua opsi bagus:

  1. gunakan dua antarmuka tap untuk openvpn. Memiliki dua proses server openvpn, satu untuk setiap antarmuka sentuh; yang satu harus mendengarkan di UDP, yang lain di TCP. Menjembatani dua antarmuka ketuk ini di server.

  2. gunakan dua antarmuka tun. Ini tidak dapat dijembatani, jadi jika Anda ingin berbagi ruang IP antara klien TCP dan UDP, Anda harus menggunakan learn-addressskrip seperti yang ada di http://thomas.gouverneur.name/2014/02/openvpn- Listen-on-tcp-dan-udp-with-tun / (namun, skrip khusus ini rentan terhadap serangan symlink / tmp, jadi hapus logging ke / tmp jika Anda menggunakannya).

Opsi ketiga adalah menjalankan dua instance openvpn dan menetapkan ruang IP klien terpisah untuk keduanya (misalnya, satu / 25 dari subnet yang sama / 24 masing-masing). Ini menghindari menjembatani dan kebutuhan untuk naskah alamat-belajar.

EDIT: karena saya membutuhkan skrip belajar-alamat sendiri, saya menulis satu. Saya menempatkannya di domain publik.

#!/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

Script ini masuk ke stderr, yang seharusnya berakhir di log openvpn.


4

Jika Anda ingin server OpenVPN Anda mendengarkan pada port TCP alih-alih port UDP, gunakan proto tcpalih-alih proto udp(Jika Anda ingin OpenVPN mendengarkan pada port UDP dan TCP, Anda harus menjalankan dua instance OpenVPN yang terpisah).

Apakah maksud Anda halaman ini sudah usang?

Saya pikir Anda dapat menjalankan dua server OpenVPN (satu untuk TCP, satu untuk UDP,) menjembatani masing-masing dengan TUN, dan kemudian menghubungkan TUN.


1
tunantarmuka tidak memiliki lapisan MAC dan dengan demikian tidak dapat menjadi anggota jembatan. Jika Anda ingin menjembatani, Anda perlu menggunakan tapantarmuka.
András Korn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.