Làm cách nào để chạy tập lệnh sau khi OpenVPN đã kết nối thành công?


50

Làm cách nào tôi có thể liên kết tập lệnh với OpenVPN để nó chạy khi VPN được kết nối thành công?


Trong trường hợp của khách hàng tôi đoán? Phần mềm nào bạn đang sử dụng? OpenVPN hoặc trình bao bọc (ví dụ: Trình quản lý mạng)?
Lekensteyn

@Lekensteyn, giấy gói network-manger-openvpn.
Oxwivi

Câu trả lời:


62

network-manager-openvpnkhông cung cấp chức năng như vậy, bạn phải sử dụng openvpntrực tiếp.

Truyền --script-security 2 --up /path/to/your/scriptcho nó khi kết nối. Nếu bạn đang sử dụng tệp cấu hình tại /etc/openvpn/, hãy nối các dòng tiếp theo vào tệp cấu hình của bạn:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Từ trang web OpenVPN :

--script-mức bảo mật [phương thức]
              Lệnh này cung cấp kiểm soát cấp chính sách đối với việc sử dụng OpenVPN
              của các chương trình và kịch bản bên ngoài. Giá trị cấp thấp hơn
              hạn chế, giá trị cao hơn được cho phép hơn. Cài đặt cho
              cấp độ:

              0 - Nghiêm cấm gọi các chương trình bên ngoài.
              1 - (Mặc định) Chỉ gọi các tệp thực thi tích hợp như ifconfig,
              ip, tuyến đường, hoặc Netsh.
              2 - Cho phép gọi các tệp thực thi tích hợp và do người dùng định nghĩa
              kịch bản.
              3 - Cho phép mật khẩu được chuyển đến các tập lệnh thông qua môi trường
              các biến (có khả năng không an toàn).
       --up cmd
              Lệnh Shell chạy sau khi mở thiết bị TUN / TAP thành công (trước
              - người dùng thay đổi UID). Kịch bản lên rất hữu ích để chỉ định
              các lệnh tuyến đường định tuyến lưu lượng IP dành cho riêng
              các mạng con tồn tại ở đầu kia của kết nối VPN vào
              đường hầm.
Tập lệnh thực thi
       --up Được thực thi sau khi liên kết ổ cắm TCP / UDP và TUN / TAP mở.
       --down Được thực thi sau khi đóng TCP / UDP và TUN / TAP.

Có nhiều sự kiện để thực thi tập lệnh, chúng có thể được tìm thấy trên trang thủ công .

Tạo /etc/openvpn/up.shvà cung cấp cho nó quyền thực thi (giả sử, 755 hoặc 700). Nội dung ví dụ để thêm địa chỉ IPv6 và tuyến đường (hiển thị cho mục đích giáo dục, không sao chép trực tiếp):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Lưu ý rằng uptập lệnh này được chạy dưới quyền root. Nếu bạn chưa chỉ định a UserGroupcài đặt, OpenVPN cũng sẽ chạy các tập lệnh như downroot.


Nếu bạn không biết cách sử dụng openvpn trực tiếp, hãy thêm chi tiết cấu hình hiện tại của bạn: Loại kết nối (ví dụ: chứng chỉ X509), cổng Gateway, nén LZO, lực lượng TCP, sử dụng thiết bị nhấn, mật mã, HMAC và TLS. Đề cập đến cài đặt IP của bạn nếu chúng không tự động. Nắm quyền riêng tư của bạn, để lại địa chỉ thực tế của bạn.
Lekensteyn

Được rồi, tôi đã quyết định sử dụng OpenVPN trực tiếp (và vâng, tôi có tệp .conf), nhưng nó sẽ tự động kết nối lại nếu mất kết nối? Và làm cách nào để tôi kết nối tự động mỗi khi có kết nối internet? Và cuối cùng, tôi không hiểu tôi phải thêm dòng nào bạn đã đề cập trong câu trả lời.
Oxwivi

Tôi đã mở rộng câu trả lời để sử dụng openvpntrực tiếp. Khi thiết lập máy chủ, tôi nhận thấy OpenVPN sẽ cố gắng kết nối lại khi máy chủ gặp sự cố. Không chắc chắn nếu OpenVPN tiếp tục thử khi giao diện mạng của bạn bị hỏng.
Lekensteyn

Vấn đề của tôi không phải là khi giao diện mạng bị hỏng - nó cố gắng kết nối lại khi mất kết nối internet và lấy lại được. Tôi chỉ muốn kết nối với VPN bất cứ khi nào tôi nhận được kết nối internet.
Oxwivi

Ồ, và tập lệnh có áp dụng cho tất cả kết nối VPN không? Và vui lòng gắn thẻ @Oxwivi khi trả lời, tôi sẽ không nhận được thông báo nào khác.
Oxwivi

5

Với câu hỏi: "Làm cách nào tôi có thể liên kết tập lệnh với OpenVPN để nó chạy khi VPN được kết nối thành công?" Tôi muốn chỉ ra rằng Lekensteyn cung cấp một câu trả lời tuyệt vời . Nhưng, tại thời điểm câu trả lời của anh ta được soạn thảo, nó thiếu một chút rõ ràng về cách các đối số dòng lệnh openvpn nên được cung cấp để bắt đầu openvpn trên máy ubfox, đặc biệt là nó hoạt động tương tự sau khi khởi động lại.


Đối số dòng lệnh Openvpn trên Ubuntu:

Đương nhiên, người ta có thể bắt đầu openvpn từ một dòng lệnh với bất kỳ tùy chọn pháp lý có sẵn nào. Nhưng, trên máy Ubuntu, nếu ai đó muốn bắt đầu openvpn với cùng các đối số dòng lệnh sau khi khởi động lại, họ nên xem xét chỉnh sửa tệp /etc/default/openvpn. Kiểm tra các dòng sau:

# Optional arguments to openvpn's command line
OPTARGS="" 

Từ trang người đàn ông openvpn trên cộng đồng--script-security

- mức độ bảo mật-mô tả
    Lệnh này cung cấp kiểm soát cấp chính sách đối với việc sử dụng bên ngoài của OpenVPN 
    chương trình và kịch bản. Giá trị cấp thấp hơn hạn chế hơn, cao hơn
    các giá trị được cho phép nhiều hơn. Cài đặt cho cấp độ:
0 - Nghiêm cấm gọi các chương trình bên ngoài. 
1 - (Mặc định) Chỉ gọi các tệp thực thi tích hợp như ifconfig, ip, route,
hoặc Netsh. 
2 - Cho phép gọi các tập tin thực thi tích hợp và tập lệnh do người dùng định nghĩa. 
3 - Cho phép mật khẩu được chuyển đến các tập lệnh thông qua các biến môi trường
(có khả năng không an toàn).

OpenVPN phát hành trước v2.3 cũng hỗ trợ cờ phương thức cho biết cách 
OpenVPN nên gọi các lệnh và tập lệnh bên ngoài. Điều này có thể được thực hiện
hoặc hệ thống. Kể từ OpenVPN v2.3, cờ này không còn được chấp nhận. Trong hầu hết * nix
môi trường phương pháp execve () đã được sử dụng mà không có bất kỳ vấn đề nào.

Một số chỉ thị như --up cho phép các tùy chọn được chuyển sang tập lệnh bên ngoài.
Trong những trường hợp này, đảm bảo tên tập lệnh không chứa bất kỳ khoảng trắng hoặc 
trình phân tích cú pháp cấu hình sẽ bị nghẹt vì nó không thể xác định nơi tập lệnh 
tên kết thúc và tùy chọn kịch bản bắt đầu.

Kết hợp với một phần viết tắt trên --up

--up cmd
    Chạy lệnh cmd sau khi mở thiết bị TUN / TAP thành công (thay đổi UID người dùng trước).
    cmd bao gồm một đường dẫn đến tập lệnh (hoặc chương trình thực thi), theo tùy chọn
    bằng lập luận. Đường dẫn và đối số có thể là trích dẫn đơn hoặc kép và / hoặc
    thoát bằng cách sử dụng dấu gạch chéo ngược và nên được phân tách bằng một hoặc nhiều khoảng trắng.

Thí dụ:

Trên máy của tôi có máy chủ openpvn.conf, tôi có các dòng sau trong /etc/default/openvpntệp của mình :

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Ngẫu nhiên, nat.sh thiết lập bản dịch địa chỉ mạng để định tuyến lưu lượng truy cập mạng riêng từ máy khách openvpn sang internet công cộng; sẽ tốt khi người ta không tin vào điểm truy cập WIFI công cộng.


Ngoài việc cho phép khởi động lại như mong đợi sau khi khởi động lại, khi nào /etc/openvpn/[client or server].conf/etc/default/openvpncác tệp được cấu hình đúng, openvpn có thể được khởi động hoặc dừng bằng:

sudo service openvpn start
sudo service openvpn stop

Các tùy chọn hữu ích khác có sẵn để service openvpnbao gồm cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.


3

Vì đó là một chủ đề khá cũ, tôi không chắc chắn nếu vẫn còn quan tâm. Nếu bạn vẫn muốn sử dụng Trình quản lý mạng để kết nối với VPN, bạn có thể thêm quy tắc udev đơn giản như sau:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

Điều này sẽ chạy bất kỳ tập lệnh nào sau khi VPN được tạo.


1

Tôi tình cờ tìm thấy câu trả lời trong nghiên cứu của mình để giải quyết vấn đề này và tôi phát hiện ra rằng giải pháp tốt nhất là (sử dụng máy chủ openvpn) như sau:

Tạo một kịch bản sẽ được thực thi:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Thêm các dòng sau vào cấu hình openvpn (thường /etc/openvpn/server.conf). Trong câu trả lời ở trên, nó được sử dụng lên xuống, được sử dụng khi máy chủ khởi động (khởi động lại). Lệnh kết nối máy khách (và ngắt kết nối máy khách) được sử dụng khi máy khách kết nối (ngắt kết nối).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>

Làm thế nào bạn có thể bao gồm tên cấu hình máy khách trong tệp nhật ký?
callisto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.