Tự động kết nối VPN


39

Tôi đang sử dụng Ubuntu 13.04 với Gnome và gần đây tôi đã thiết lập VPN (mở). Có cách nào để kích hoạt nó theo mặc định? Mỗi lần tôi khởi động hoặc thậm chí mất kết nối, tôi phải kích hoạt VPN theo cách thủ công. Có một lựa chọn tôi đang thiếu?

Câu trả lời:


66

Thông qua applet nm của trình quản lý mạng (applet khay Gnome hoặc Unity được cài đặt theo mặc định), bạn có thể định cấu hình Trình quản lý mạng để tự động kết nối với VPN khi mạng được kết nối.

  1. Nhấp vào applet khay mạng và nhấp vào "Chỉnh sửa kết nối ..." hoặc chạy nm-connection-editor.
  2. Chọn kết nối mạng và nhấp vào "Chỉnh sửa ..."
  3. Kiểm tra "Tự động kết nối với VPN khi sử dụng kết nối này" và chọn VPN mong muốn trong danh sách thả xuống.
  4. Tiết kiệm.

ảnh chụp màn hình trình biên tập kết nối


Khi điều này được kích hoạt, có một lỗi trong Trình quản lý mạng có thể phá vỡ chức năng "tự động kết nối với mạng này". ( Chỉnh sửa : lỗi này hiện đã được đánh dấu là "sửa lỗi được phát hành" trong Ubuntu 16.04). Nếu NetworkManager cố gắng tự động kết nối và không thành công, bạn sẽ thấy một dòng như sau /var/log/syslog:

<error> [1401130450.367538] [nm-vpn-connection.c:1374] get_secrets_cb(): Failed to request VPN secrets #2: (6) No agents were available for this request.

Có vẻ như NetworkManager không lấy được mật khẩu VPN của người dùng gnome-keyring-daemon. Một cách giải quyết khác là để NetworkManager lưu mật khẩu trong văn bản gốc trong tệp cấu hình trong /etc/NetworkManager/system-connections/. Để làm điều này:

  1. Mở một thiết bị đầu cuối.
  2. sudoedit /etc/NetworkManager/system-connections/<VPN>, <VPN>tệp cấu hình cho VPN của bạn ở đâu (tên tệp thường là tên bạn đã gán cho VPN).
  3. Thay đổi dòng password-flags=1thànhpassword-flags=0
  4. Lưu và thoát.

NetworkManager hiện sẽ lưu trữ mật khẩu VPN (xem man nm-settingschi tiết) và tự động kết nối mạng sẽ hoạt động trở lại.


5
Điều đó không tồn tại trong quản lý mạng gnome.
Paul Woitaschek

4
Khi mở, nm-connection-editorbạn có thể tìm thấy điều này khi chỉnh sửa một kết nối trong tab chung .
Lode

1
Điều này gây ra kết nối không tự động kết nối với tôi. Có giải pháp nào cho việc này không?
Tamás Barta

@Barta Đó là một lỗi trong NetworkManager. Tôi đã thêm một cách giải quyết cho câu trả lời của tôi.
Vincent Yu

8

Hãy xem vpnautoconnect.

vpnautoconnect là một trình nền cho phép bạn tự động kết nối lại (khi khởi động) một vpn tạo với trình quản lý mạng. Nó có thể kết nối lại rất nhanh và theo dõi băng thông, Nó hoạt động với kết nối pptp và openvpn.

Để biết thêm thông tin và để tải về, hãy truy cập Trang web .

Hãy thử điều này là tốt:

sử dụng tính năng AUTOSTART trong /etc/default/openvpn

Hoặc là

Tìm ra UUID của kết nối VPN của bạn.

nmcli con list | grep -i vpn

UUID là cột thứ hai với các chữ cái, số và dấu gạch ngang.

Bắt đầu kết nối trong một thiết bị đầu cuối. Chỉ cần nhấn Ctrl+ Alt+ Ttrên bàn phím để mở Terminal. Khi nó mở, chạy (các) lệnh bên dưới:

nmcli con up uuid <put you UUID here>

Đặt cái này để chạy khi khởi động.

Chuyển đến Dash, nhập và chọn Ứng dụng khởi động, nhấp vào Thêm và thêm lệnh nmcli ở trên (với UUID). Nhấp vào "Thêm". Trong kiểu tên, tên bạn muốn sử dụng, và trong Command, đặt toàn bộ dòng nmcli ở trên. Nhấp vào "Thêm" một lần nữa. Bây giờ, khởi động lại và thử nó.

Nguồn: SourceForge


Tôi đã cài đặt và cấu hình nó, khởi động lại máy tính của tôi nhưng nó không hoạt động.
Paul Woitaschek

Tôi đã thêm một số thông tin trong câu trả lời của tôi.
Mitch

Có tài liệu nào có sẵn cho vpnautoconnect? Trang web của họ là một trang dự án SourceForge bị bỏ hoang và gói không cung cấp trang man. Tough nó nghe có vẻ hứa hẹn.
Tamás Barta

Tôi dường như không thể tìm thấy bất kỳ, nhưng tôi sẽ tiếp tục tìm kiếm.
Mitch

Danh sách hành động đã được đổi tên để hiển thị trong 15.04 hoặc 15.10
Croll

2

Tôi khuyên bạn nên kiểm tra kịch bản trong bài viết này :

#!/bin/bash

# YourVPN here is the name of desired vpn connection to monitor
# edit this line:
##################
VPNNAME=YourVPNUUID
# enter desired time between checks here (in seconds)
SLEEPTIME=15
##################

nice=0

for (( ; ; )); do

# creating infinite loop

tested=$(nmcli con status uuid $VPNNAME | grep -c UUID)
#possible results:
# 0 - no connection - need to start
# 1 - working connection, continue.

case $tested in
"0")
echo "Not connected - starting"

#increase nice counter
nice=$[nice+1]

#if "nice start" fails for 3 times
if [ $nice -ge 3 ];
then
#TRY to knock hard way, resetting the network-manager (sometimes it happens in my kubuntu 12.04).
      echo "HARD RESTART!"
      nmcli nm enable false
      nmcli nm enable true
      sleep 5
      nmcli con up uuid $VPNNAME
      nice=0
else
#not yet 3 falures - try starting normal way
      echo "trying to enable."
      nmcli con up uuid $VPNNAME
fi

;;

"1")
echo "VPN seems to work" 

;;
esac

sleep $SLEEPTIME

done

Để tìm ra giá trị của YourVPNUUID$ VPNNAME, chỉ cần chạy như sau;

nmcli con list | grep -i vpn

2

vpnautoconnect không hoạt động với tôi trong 12.04 LTS và dường như tôi không phải là người duy nhất.

Tôi đã nghiên cứu nó một chút và kết hợp một số mã hiện có để tạo ra tập lệnh bash đầu tiên của tôi. Nó kiểm tra xem một kết nối VPN đã cho có hoạt động hay không và sẽ kết nối nếu không. Nếu được kết nối, nó sẽ ngủ trong một thời gian nhất định, ví dụ 1 phút và lặp lại quá trình vô thời hạn.

#! /bin/bash

while true
do
   connection="Auto Ethernet"
   vpn_connection="My VPN connection"
   run_interval="60"

   active_connection=$(nmcli dev status | grep "${connection}")
   active_vpn=$(nmcli dev status | grep "${vpn_connection}")

   if [ "${active_connection}" -a ! "${active_vpn}" ];
   then
      nmcli con up id "${vpn_connection}"
   fi

   sleep $run_interval
done

Hướng dẫn:

  1. Tạo một tệp văn bản trống có tên vdn-auto-connector.sh (Tôi đã lưu nó trong thư mục nhà của mình. Nhấp chuột phải vào tệp và chọn Thuộc tính-> Quyền và kiểm tra "Cho phép thực thi tệp dưới dạng chương trình". (Bạn có thể phải lưu trữ tệp ở một nơi khác và / hoặc thay đổi quyền đọc / ghi / ngoại lệ nếu máy tính của bạn có nhiều người dùng.)

  2. Sao chép mã từ trên vào tệp bạn đã tạo. Thay thế các giá trị của ba biến sau:

    kết nối = "Ethernet tự động"

    vpn_connection = "Kết nối VPN của tôi"

    run_interval = "60"

    Họ có thể được tìm thấy bằng cách mở trình quản lý mạng. Trong trường hợp của tôi, kết nối = "Ethernet tự động" là kết nối có dây hoạt động của tôi (chưa được thử nghiệm với mạng không dây) và vpn_connection = "Kết nối VPN của tôi" là tên của kết nối VPN của tôi. run_interval = "60" là khoảng thời gian tính bằng giây để khi nào lặp lại tập lệnh.

  3. Mở Ứng dụng-> Công cụ hệ thống-> Tùy chọn-> Ứng dụng khởi động. Thêm một tên phù hợp, ví dụ "VPN Auto Connector" và đối với lệnh, hãy chọn tệp .sh bạn đã lưu trước đó. Bây giờ tập lệnh bash sẽ chạy khi khởi động và sẽ tiếp tục kiểm tra xem kết nối VPN có hoạt động không. Bạn có thể thử nó bằng cách ngắt kết nối VPN và nó sẽ được kích hoạt lại tự động.


Cảm ơn rất nhiều. Kịch bản này là dễ hiểu.
Evan Hu

0

Vpnautoconnect hoạt động tốt trong Ubuntu 12.04, 13.04 và 13.10 (Tôi nghĩ rằng trong 13.10, tùy chọn "kết nối tự động" trong Trình quản lý mạng đã được sửa và hoạt động ngay bây giờ)

Vì vậy, nếu bạn gặp khó khăn khi cài đặt hoặc làm cho nó hoạt động hoặc không tìm thấy tùy chọn "openvpn" trong menu thả xuống của Network-Manager để tạo kết nối vpn mở, bạn có thể theo dõi tuto này, cung cấp cho bạn Tất cả Các bước, rất rõ ràng và dễ dàng để áp dụng.

Có một cái nhìn TẠI ĐÂY

Và cho tôi biết :-)


0

Đây là một kịch bản rất mạnh mẽ và đáng tin cậy sẽ:

  • Kiểm tra xem bạn có kết nối với bất kỳ VPN nào không
  • Nếu không, hãy kết nối với VPN hoạt động gần đây nhất

Điều này đặc biệt hữu ích nếu bạn thường xuyên kết nối với các VPN khác nhau vì bạn không phải chỉ định một kết nối VPN duy nhất để kết nối lại.

#!/bin/bash

nmcli --mode multiline --fields uuid,vpn connection status | grep -qc "^VPN:.*yes" 1>/dev/null 2>&1

if [ $? -ne 0 ]; then
        last_vpn_uuid=`nmcli --mode tabular --fields uuid,type,timestamp connection list | grep -E "\s+vpn\s+" | sort -k3 -nr | head -n1 | awk '{ print $1 }'`

        nmcli connection up uuid "$last_vpn_uuid"
fi

Điều này thực sự thú vị, nhưng nó gây ra một số lỗi trên: công cụ $ nmcli -version nmcli, phiên bản 0.9.10.0 $ lsb_release -a Không có mô-đun LSB nào khả dụng. Nhà phân phối ID: Ubuntu Mô tả: Ubuntu 15.04 phát hành: 15.04 Codename: sống động
gare

0

Tôi đang dùng Ubuntu 14.04 LTS trên một số máy. Do thực tế, tôi có một số điều kiện tiên quyết đặc biệt:

  1. Tôi không muốn lưu mật khẩu trong trình quản lý mật khẩu
  2. Tôi đang sử dụng một khách VirtualBox bị mất VPN khi kết nối lại mạng
  3. Đối thoại mật khẩu mở nhiều lần khi kết nối lại
  4. Tôi đang sử dụng máy chủ VPN dự phòng (chuyển đổi dự phòng)
  5. Sử dụng tệp cấu hình cho uuids của tôi

Tôi đang làm việc với kịch bản rất được chứng minh và rất đáng tin cậy này:

Tuy nhiên - có một số cảnh báo với applet của trình quản lý mạng mà tôi có thể tạm thời giải quyết (xem phần Khắc phục sự cố của bài viết).

vpnautoconnect không làm việc cho tôi.


0

câu trả lời của @vincentYo nhìn thẳng về phía trước, nhưng tôi không thể hoàn thành nó, vì vậy tôi đã làm như dưới đây.

step1: tạo tập lệnh shell và thêm lệnh vpn

vim auto_vpn.sh

#!/bin/sh vpnc --enable-1des

Bước2: mở tệp sudoer và yêu cầu kernel không hỏi mật khẩu cho tệp này.

sudo vim / etc / sudoers

hầu hết những thứ bên trong tập tin này sẽ được bình luận, chỉ cần thêm vào như bên dưới

tên người dùng ALL = (root) NOPASSWD: your_shell_script.sh

thí dụ:

sharath ALL = (root) NOPASSWD: /home/sharath/workspace/work/src/auto_vpn.sh

Bước 3: thiết lập một công việc định kỳ, sẽ kích hoạt tập lệnh shell này, bên dưới công việc cron sẽ chạy mỗi phút (bcz internet của tôi tiếp tục và tắt, vì vậy mỗi phút)

* * * * * sudo /home/sharath/workspace/work/src/auto_vpn.sh

Tôi đang sử dụng cái này từ nhiều ngày, hoạt động tốt trong Ubuntu 16.04 LTS .. Xin chào !!

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.