Quá trình openvpn tương tự không thể nghe trên các ổ cắm UDP và TCP cùng một lúc.
Bạn có hai lựa chọn tốt:
sử dụng hai giao diện tap cho openvpn. Có hai quy trình máy chủ openvpn, một cho mỗi giao diện nhấn; một cái nên nghe trên UDP, cái kia trên TCP. Cầu hai giao diện tap trên máy chủ.
sử dụng hai giao diện điều chỉnh. Chúng không thể được bắc cầu, vì vậy nếu bạn muốn chia sẻ không gian IP giữa các máy khách TCP và UDP, bạn sẽ cần sử dụng learn-address
tập lệnh như tập lệnh tại http://thomas.godeneur.name/2014/02/openvpn- nghe-on-tcp-và-udp-with-tun / (tuy nhiên, tập lệnh cụ thể này dễ bị tấn công / tmp symlink, vì vậy hãy xóa đăng nhập vào / tmp nếu bạn sử dụng nó).
Tùy chọn thứ ba là chỉ chạy hai trường hợp openvpn và gán không gian IP máy khách riêng biệt cho cả hai (ví dụ: một / 25 từ cùng / 24 mạng con mỗi mạng). Điều này tránh việc bắc cầu và sự cần thiết của một kịch bản địa chỉ học.
EDIT: vì tôi cần một kịch bản địa chỉ học như vậy, tôi đã viết một kịch bản. Tôi đặt nó trong phạm vi công cộng.
#!/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
Kịch bản lệnh này ghi vào stderr, sẽ kết thúc trong nhật ký openvpn.
tun
các giao diện không có lớp MAC và do đó không thể là thành viên của một cây cầu. Nếu bạn muốn bắc cầu, bạn cần sử dụngtap
giao diện.