Trình nền truyền qua OpenVPN


20

Gần đây tôi đã mua được BeagleBone Black, trên đó tôi đã cài đặt Ubuntu bằng phương pháp này . Nó đã làm việc cho đến nay. Tôi muốn sử dụng BeagleBone của mình như một hộp torrent, nhưng tôi không muốn thực hiện trực tiếp qua kết nối Internet của mình (tôi không nghĩ ISP của tôi sẽ thích nó) - vì vậy tôi đã mua đăng ký VPN từ máy chủ châu Âu . Trước đây, tôi đã kết nối máy tính xách tay của mình với VPN này và Truyền đang chạy. Tôi biết rằng kết nối VPN hoạt động trong Ubuntu và máy chủ cung cấp thông tin thiết lập cho OpenVPN. Khó chịu, tính chất động của địa chỉ IP được gán có nghĩa là nó sẽ thay đổi thường xuyên, vì vậy khi tôi sử dụng máy tính xách tay của mình với VPN, tôi sẽ tự đặt địa chỉ nghe trong Truyền thành giá trị bắt buộc.

Lý tưởng nhất là tôi muốn thiết lập sau:

  • Truyền chỉ chạy qua VPN và bị cấm chạy torrent trên kết nối WAN thông thường
  • Chỉ lưu lượng truy cập được truyền tới Truyền sẽ được chấp nhận hoặc gửi qua VPN, tất cả lưu lượng không mong muốn khác sẽ bị hủy
  • Truyền sử dụng cổng thích hợp để nghe, dựa trên địa chỉ IP được chỉ định
  • OpenVPN tự động khởi động khi khởi động, sau đó bắt đầu truyền
  • GUI web của bộ truyền có thể được truy cập qua mạng LAN và có thể qua Internet từ kết nối mạng của tôi (tức là không quay lại qua VPN)

3
Tự trả lời không tệ. Đừng xin lỗi họ. Bạn cũng không cần phải giải thích đó là những gì bạn đang làm ... Đó là một hành vi được khuyến khích
RobotHumans

Đồng ý với @hbdgaf. Không cần phải xin lỗi. Công việc tuyệt vời trên tất cả các mặt trận.
JakeGould

Câu trả lời:


23

Lưu ý: (2016 / 02-22) Tôi đã nhận ra cấu hình này rò rỉ các truy vấn DNS đến trình theo dõi torrent thông qua mạng WAN thông thường, thay vì gửi nó qua VPN. Tôi đang điều tra cách khắc phục điều này. Tôi sẽ tiếp tục chạy cấu hình của mình, vì bản thân kết nối sử dụng VPN đúng cách.


Cập nhật: Tôi nhận thấy rằng khi tôi đặt Truyền tải xuống qua đêm trên Beaglebone, việc sử dụng CPU sẽ tăng lên 100% sau một thời gian. Nó dường như không xảy ra sau cùng một khoảng thời gian, đôi khi nó ổn cả đêm, những lần khác nó vật lộn sau 10 phút. Nó cũng có thể phục hồi bằng cách tạm dừng tất cả các torrent và chờ tải CPU trở lại bình thường, sau đó bắt đầu lại. Tôi vẫn đang điều tra. Một cách giải quyết có thể là tạm dừng và tiếp tục dòng chảy theo định kỳ, mặc dù đó không phải là cách giải quyết tốt. Lưu ý vấn đề này chỉ áp dụng cho Beaglebone và có thể các thiết bị ARM khác. Tôi chưa bao giờ gặp vấn đề này trên CPU x86.


Giới thiệu

Tôi đã phát triển và thử nghiệm giải pháp này cho Ubuntu 14.04, chạy trên BeagleBone Black. Nhà cung cấp VPN mà tôi đang sử dụng được gọi là ibVPN . Nó sẽ hoạt động với mọi phần cứng được hỗ trợ (ví dụ: trên máy tính x86 "bình thường"), với bất kỳ nhà cung cấp VPN tương thích OpenVPN nào - và có thể sẽ hoạt động trong 14.10 trở lên. Tại một số điểm tôi tin rằng Ubuntu sẽ sử dụng SystemD để khởi động, điều đó có nghĩa là các tập lệnh Upstart được sử dụng ở đây sẽ cần phải được di chuyển. Cập nhật: Jonas Kalderstam có câu trả lời dưới đây cho việc sử dụng SystemD. Tôi cũng giả sử rằng ufw đang được sử dụng làm tường lửa, nếu bạn đang sử dụng một cái gì đó khác thì các lệnh ufw ở đây sẽ cần phải được thay đổi.

Tôi giả định rằng tất cả các công việc được thực hiện qua kết nối SSH tới hệ thống, mặc dù nó cũng hoạt động tốt nếu được nhập vào một thiết bị đầu cuối vật lý.

Đây là một hướng dẫn khá dài, xin vui lòng đọc tất cả trước và chắc chắn rằng bạn cảm thấy thoải mái với những gì bạn sẽ làm.

Tôi cũng nhận thấy rằng Truyền không liên kết chính xác với địa chỉ IP để gửi dữ liệu UPnP / NAT-PMP - tức là dữ liệu torrent đi chính xác qua VPN, nhưng nếu chuyển tiếp cổng UPnP được bật Truyền sẽ yêu cầu chuyển tiếp cổng từ bộ định tuyến cục bộ , không thông qua VPN từ máy chủ VPN. Do đó, tôi đã tạo tập lệnh Upstart vô hiệu hóa chuyển tiếp cổng, vì nó có thể xuất hiện như thể nó đã hoạt động, nhưng nó không hoạt động. Có thể sử dụng iptables và iproute để buộc tất cả lưu lượng truy cập từ người dùng truyền tải debian thông qua VPN, nhưng tôi vẫn đang xem xét điều này. Nó cũng hoạt động nếu tuyến mặc định được thay đổi để gửi tất cả dữ liệu Internet qua VPN, nhưng tôi không muốn làm điều đó vì tôi cũng sử dụng máy chủ này cho những thứ khác và điều này cũng sẽ khiến tất cả các cập nhật hệ thống đi qua VPN.Câu hỏi này có thêm thông tin nếu bạn thực sự muốn UPnP hoạt động trên VPN . Cập nhật: falk0069 có một mẹo tuyệt vời dưới đây để giúp khuyến khích UPnP qua VPN.

Cài đặt và cấu hình OpenVPN

Tôi khuyên bạn nên thử kết nối VPN của mình để hoạt động bằng Ubuntu trước khi thử để nó hoạt động ở đây - tức là từ máy tính để bàn. Điều này sẽ xác nhận rằng bạn có cấu hình chính xác và giảm thời gian gỡ lỗi.

Đầu tiên, cài đặt các gói cần thiết

sudo apt-get install openvpn

Tiếp theo, tạo một thư mục để lưu trữ các tệp cấu hình. Tôi đang sử dụng / opt / ibVPN, vì đó là nhà cung cấp mà tôi đang sử dụng. Thay đổi nó thành bất cứ điều gì bạn thích.

sudo mkdir /opt/ibVPN

Điều đầu tiên cần làm trong thư mục mới này là tạo tệp cấu hình để chạy máy khách VPN. ibVPN cung cấp một tệp cấu hình cơ bản cho người dùng Linux, mà tôi hầu như chỉ sao chép và dán.

cd /opt/ibVPN
sudo vim config.ovpn

Sao chép và dán phiên bản đã chỉnh sửa của bạn vào vim, sử dụng cài đặt cho nhà cung cấp VPN của bạn. (FYI, dán vào thiết bị đầu cuối Ubuntu là Ctrl+Shift+V) Bạn sẽ có thể nhận được điều này từ nhà cung cấp VPN của bạn.

remote 888.888.888.888 1194 udp      #This address will be different for you
client
dev tap1
resolv-retry infinite
script-security 3 system
explicit-exit-notify 3
persist-key
mute-replay-warnings
ca ibvpn.com.crt
comp-lzo
verb 3
mute 20
ns-cert-type server
fragment 1300
route-delay 2
reneg-sec 0
max-routes 5000
link-mtu 1578

auth-user-pass pass
auth-nocache
persist-tun
route-noexec
lport 1195
lladdr 00:FF:11:AA:BB:CC
route-up "/opt/home/openvpn/route-up.sh"
down "/opt/home/openvpn/down.sh"

Đối với những người không quen thuộc với vim, nhấn Insert để gõ hoặc dán văn bản, sau đó nhấn Escape và gõ :wq để lưu và thoát. Tất nhiên, bạn không phải sử dụng vim - bất kỳ trình soạn thảo văn bản nào cũng sẽ hoạt động.

Tôi sẽ nhanh chóng giải thích tệp cấu hình này: 18 dòng đầu tiên chỉ định cài đặt cụ thể sẽ sử dụng với máy chủ, chúng đến từ ibVPN - bạn có thể sẽ hơi khác nếu bạn có nhà cung cấp khác. Các dòng tiếp theo là các tùy chọn sửa đổi tôi đã chỉ định.

  • Nếu tệp cài đặt của bạn có bất kỳ dòng nào auth-user*, hãy nhận xét chúng. Để thiết lập này hoạt động tự động, chúng tôi cần có một tệp có tên người dùng và mật khẩu trong đó - vì vậy hãy đảm bảo mật khẩu bạn chọn cho nhà cung cấp VPN mạnh, ngẫu nhiên và duy nhất.

  • Thông báo auth-user-pass passcho OpenVPN tìm kiếm một tệp được gọi passđể đọc người dùng và mật khẩu từ đó.

  • auth-nocache xóa mật khẩu khỏi bộ nhớ, điều này có thể làm tăng tính bảo mật một chút nếu bạn lo lắng về nó.

  • persist-tun sẽ cố gắng giữ cùng một địa chỉ IP từ máy chủ nếu kết nối của bạn bị mất, điều đó có nghĩa là sẽ ít bắt đầu và dừng truyền-daemon hơn.

  • route-noexecyêu cầu khách hàng OpenVPN không tự động sử dụng các tuyến do máy chủ cung cấp - việc này sẽ kéo tất cả lưu lượng truy cập mạng qua VPN. Chúng tôi chỉ muốn gửi lưu lượng torrent, vì vậy chúng tôi sẽ cần sử dụng các cài đặt định tuyến khác nhau.

  • lport 1195 nói với máy khách OpenVPN sử dụng cổng 1195 thay vì 1194 - trong trường hợp của tôi, tôi cũng muốn chạy máy chủ OpenVPN trên cùng một thiết bị và máy chủ sẽ cần sử dụng cổng 1194. Ngay cả khi bạn không chạy máy chủ OpenVPN, nó vẫn không chạy được máy chủ OpenVPN. không làm tổn thương để thay đổi này.

  • Tôi đã thay đổi dòng dev tapthành dev tap1, để buộc thiết bị ảo thành tap1 thay vì được OpenVPN gán lại, vì chạy một máy chủ OpenVPN riêng biệt. Ngay cả khi bạn không chạy máy chủ VPN, thay đổi này không thành vấn đề. Các tập lệnh tường lửa đã được viết để sử dụng tap1, vì vậy nếu bạn muốn sử dụng một thiết bị khác thì hãy nhớ thay đổi các tập lệnh đó khi thích hợp.

  • lladdr 00:FF:11:AA:BB:CC yêu cầu OpenVPN chỉ định giao diện nhấn để có địa chỉ MAC này, có thể hữu ích cho các quy tắc tường lửa iptables.

  • route-updownchạy các kịch bản để bắt đầu và dừng Truyền-daemon theo yêu cầu - những thứ này cần thiết ở đây vì chúng chạy với các biến môi trường chứa thông tin về kết nối, cần thiết để liên kết chính xác Truyền đến đúng địa chỉ IP và cổng.

Trong trường hợp của tôi, tôi đã có chứng chỉ máy chủ từ nhà cung cấp VPN - cũng phải nằm trong cùng thư mục với tệp cấu hình.

sudo vim /opt/ibVPN/ibvpn.com.crt

Sao chép và dán tệp này hoặc di chuyển nó qua SCP hoặc SSHFS.

-----BEGIN CERTIFICATE-----
MIIDeDCCAuGgAwIBAgIJAMVKgpjMPUfxMA0GCSqGSIb3DQEBBQUAMIGFMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExFTATBgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMG
A1UEChMMRm9ydC1GdW5zdG9uMRgwFgYDVQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAf
BgkqhkiG9w0BCQEWEm1lQG15aG9zdC5teWRvbWFpbjAeFw0xMDA3MjExOTU5MzVa
Fw0yMDA3MTgxOTU5MzVaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFTAT
BgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMGA1UEChMMRm9ydC1GdW5zdG9uMRgwFgYD
VQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAfBgkqhkiG9w0BCQEWEm1lQG15aG9zdC5t
eWRvbWFpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz23m3BXY5Asiw8Dx
T4F6feqsp+pIx6ivftTniyUCbSAxI1J1s1x75DzxmUpIwPu5xavzgPXgZr8FT81X
JGqF9km4AE95iddJawKx0wNgdTo7GximQq9rw0dsQIB5hZZQ9TJwHC3VOnmEic5A
OawKOCybMcRs8saLakZOgh7Xc+UCAwEAAaOB7TCB6jAdBgNVHQ4EFgQUeRhE2N4l
XwL4H1dbjkZ4ou6fj3AwgboGA1UdIwSBsjCBr4AUeRhE2N4lXwL4H1dbjkZ4ou6f
j3ChgYukgYgwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVMBMGA1UEBxMM
U2FuRnJhbmNpc2NvMRUwEwYDVQQKEwxGb3J0LUZ1bnN0b24xGDAWBgNVBAMTD0Zv
cnQtRnVuc3RvbiBDQTEhMB8GCSqGSIb3DQEJARYSbWVAbXlob3N0Lm15ZG9tYWlu
ggkAxUqCmMw9R/EwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQASt0pl
WzVseQLTNM8Mlgw4ZnGAv/x2xnijmMqrkE+F7pnaOicGpxgCfMKzjZuJu0TNJqF2
fibE7GhMdomD4dLFgIu8Wb5E7iQ1CSBEOGumRhK8qCsDzjr7WXUdhqA6Xvo+ylU6
DMzy0Wn3NNvfGC+qxOgybYCJwDnVPi0CEDSbzQ==
-----END CERTIFICATE-----

Rõ ràng nếu bạn không sử dụng tài khoản ibVPN, chứng chỉ của bạn sẽ khác.

Bây giờ chúng ta hãy tạo tập tin mật khẩu:

sudo vim /opt/ibVPN/pass

Dòng đầu tiên phải là tên người dùng đầy đủ, sau đó dòng thứ hai phải là mật khẩu. Đây phải là nội dung duy nhất của tập tin này.

you@address.com
myBIGstrongpassword1234567890

Chúng tôi cũng phải bảo mật các quyền trên tệp này hoặc OpenVPN sẽ không bắt đầu.

sudo chmod 400 pass

Điều này sẽ làm cho tệp chỉ đọc và chỉ dành cho chủ sở hữu (tức là không có người dùng nào khác có thể đọc nó)

Các lệnh này sẽ tạo các tệp để chạy khi khởi động và đặt chúng chỉ có thể được thực thi bằng root.

sudo touch route-up.sh
sudo touch down.sh
sudo chmod 700 route-up.sh
sudo chmod 700 down.sh

Tại thời điểm này, có lẽ nên kiểm tra xem kết nối VPN có thực sự hoạt động hay không. Bắt đầu kết nối với:

sudo openvpn --cd /opt/ibVPN --config config.ovpn

Bạn sẽ thấy các cảnh báo rằng các lệnh bên ngoài lên và xuống không thể chạy được, nhưng đừng lo lắng về điều đó. Nếu nó hoạt động, bạn sẽ thấy Initialization Sequence Completedtrên thiết bị đầu cuối. Nhấn Control+Cđể kết thúc kết nối. Nếu nó không hoạt động, bạn sẽ phải điều tra tại sao không và sửa nó trước khi tiếp tục. Tôi thấy rằng đôi khi phải mất một vài lần để bắt đầu làm việc. Hãy chắc chắn rằng tập tin mật khẩu của bạn là chính xác. Có rất nhiều tài nguyên tuyệt vời trên Internet về OpenVPN, vì vậy hãy xem xung quanh.

Tại thời điểm này, có lẽ dễ dàng nhất để chuyển sang truyền và chạy. Khi bạn chắc chắn rằng cả VPN và Truyền có thể chạy riêng, chúng có thể được kết hợp.

Cài đặt và cấu hình Truyền

Cài đặt các gói cần thiết:

sudo apt-get install transmission-daemon

Theo mặc định, Transmission sẽ chạy tự động khi khởi động. Vì cuối cùng chúng tôi sẽ sử dụng OpenVPN để bắt đầu Truyền, chúng tôi muốn tắt tính năng này. Để làm như vậy, chỉnh sửa tệp cấu hình cho Transmission-daemon

sudo vim /etc/default/transmission-daemon

Và thay đổi dòng sau để đọc:

ENABLE_DAEMON=0

Bây giờ Transmission sẽ không bắt đầu khởi động.

Bây giờ chúng ta hãy tạo một thư mục cho các cài đặt Truyền tải cư trú và cho các torrent được tải xuống đi vào. Điều này giả định rằng bạn đã thiết lập một loại đĩa nào đó và nó được gắn tại / media / arm-đĩa /. Vì mục đích bảo mật, daemon sẽ được điều hành bởi chính người dùng của nó chứ không phải là root hoặc là "ubfox". Một người dùng mới được tạo bởi trình cài đặt cho truyền-daemon, "debian-Transmission". Người dùng này cần sở hữu thư mục mà chúng tôi tạo và có quyền truy cập đọc và ghi vào vị trí lưu trữ cho các torrent được tải xuống.

sudo mkdir /opt/transmission
sudo chown debian-transmission:debian-transmission /opt/transmission
sudo mkdir /media/arm-disk/torrents-complete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-complete
sudo mkdir /media/arm-disk/torrents-incomplete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-incomplete

Bây giờ chúng ta cần bắt đầu truyền, chỉ một thời gian ngắn, để nó tạo tệp cài đặt mà chúng ta cần:

sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Lệnh này bắt đầu truyền-daemon với tư cách là người dùng truyền debian, bảo nó sử dụng thư mục / opt / truyền cho các tệp cài đặt và bảo nó tiếp tục chạy ở nền trước. Khi nó đã chạy được vài giây, nhấn Control+Cđể kết thúc nó. Bây giờ chúng ta có thể chỉnh sửa tập tin cài đặt.

sudo -u debian-transmission vim /opt/transmission/settings.json

Bây giờ chúng ta cần thay đổi thành các dòng sau từ mặc định của chúng để đọc:

"download-dir": "/media/arm-disk/torrents-complete",

"incomplete-dir": "/media/arm-disk/torrents-incomplete",

"incomplete-dir-enabled": true,

"rpc-whitelist": "127.0.0.1,192.168.1.*",

Lưu và thoát (Thoát, gõ: wq và nhấn Enter)

Hai chỉnh sửa ở giữa sẽ cho phép sử dụng thư mục "chưa hoàn thành", tách các torrent đã hoàn thành của bạn khỏi các thư mục chưa hoàn thành. Điều này không hoàn toàn cần thiết, nhưng cá nhân tôi thấy nó cực kỳ hữu ích. Chỉnh sửa cuối cùng cho phép GUI web được truy cập bởi bất kỳ máy tính nào trong mạng LAN (giả sử mạng con LAN của bạn là 192.168.1.0, hãy sửa đổi điều này nếu nó khác).

Bây giờ là một ý tưởng tốt để chạy lại Transmission, để xem nó có hoạt động không và thực sự có thể tải xuống một torrent. Chúng tôi sẽ sử dụng cửa sổ trình duyệt web để truy cập GUI và thêm torrent. Trước tiên, hãy cho phép truy cập vào GUI web thông qua tường lửa từ mạng LAN, sau đó chạy lại trình truyền tải.

sudo ufw allow in from 192.168.0.0/16 to any port 9091
sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Truy cập URL này trong Firefox (hoặc bất kỳ trình duyệt nào bạn thích): http://XXX.XXX.XXX.XXX:9091 , trong đó XXX được thay thế bằng địa chỉ máy chủ của bạn trên mạng LAN (ví dụ 192.168.1.10). Tìm một torrent để tải xuống, ví dụ Big Buck Bunny ở 1080p60hz. Đây là một bộ phim ngắn miễn phí, có sẵn để tải về miễn phí. Trong GUI truyền tải, nhấp vào nút "Mở torrent" và dán liên kết này (hoặc bất kỳ torrent nào bạn muốn) vào hộp đầu tiên. Sau đó nhấn "Tải lên". Nếu Transmission hoạt động chính xác, torrent sẽ bắt đầu tải xuống. Nếu không, thì bạn sẽ cần tìm hiểu tại sao trước khi tiếp tục. Có rất nhiều tài nguyên có sẵn trên Internet để sử dụng truyền-daemon. Nó cũng có thể là torrent bạn chọn không hoạt động, trước tiên hãy thử một vài cái khác.

Sau khi quá trình tải xuống hoàn tất, nhấn Control+Ctrong cửa sổ terminal để dừng truyền-daemon.

Định cấu hình Truyền liên kết với giao diện VPN

Bây giờ, hãy tạo một kịch bản Upstart, sẽ được sử dụng để bắt đầu Truyền khi VPN đã sẵn sàng.

sudo mv /etc/init/transmission-daemon.conf /etc/init/transmission-daemon.conf.bak

Đừng lo lắng nếu điều này phàn nàn, đó chỉ là để tạo một bản sao lưu của tệp Upstart, nếu nó tồn tại - nó có thể không có. Hãy mở vim để chỉnh sửa cái mới:

sudo vim /etc/init/transmission-daemon.conf

Dán cái này vào trình chỉnh sửa:

description "transmission-daemon, attached to OpenVPN tunnel tap1"

start on transmission-daemon-start
stop on runlevel [!2345] or transmission-vpn-down

# This includes the information from OpenVPN into this environment

export LOCAL_IP
env PORT=51413

# give time to send info to trackers
kill timeout 30

# Run as unprivileged user
setuid debian-transmission
setgid debian-transmission

# Start transmission again if it stops for some reason
respawn
# If transmission stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60

exec /usr/bin/nice -15 /usr/bin/transmission-daemon --config-dir /opt/transmission --bind-address-ipv4 $LOCAL_IP --peerport $PORT --no-portmap --foreground

Lưu và đóng vim. ( Escape, sau đó gõ :wq). Một lần nữa, mở vim:

sudo vim /etc/init/transmission-up.conf

Và dán cái này:

description "Script to create firewall and routing rules for transmission-daemon"

start on transmission-vpn-up

# This includes the information from OpenVPN into this environment
export VPN_GATEWAY
export LOCAL_IP
env PORT=51413

task

script
    # Set up IP route, firewall rules
    # It doesn't matter if they already exist, they will be skipped
    /sbin/ip route add default via $VPN_GATEWAY dev tap1 table 200
    /sbin/ip rule add from $LOCAL_IP table 200
    /sbin/ip route flush cache
    /usr/sbin/ufw insert 1 reject out on eth0 from any port $PORT
    /usr/sbin/ufw insert 1 reject in on eth0 to any port $PORT
    /usr/sbin/ufw insert 1 deny in on tap1 to any
    /usr/sbin/ufw insert 1 allow in on tap1 to any port $PORT proto udp

    # Start the actual transmission-daemon process, in a separate task so that unprivileged user/group can be set
    /sbin/initctl emit transmission-daemon-start LOCAL_IP=$LOCAL_IP

end script

Một lần nữa, lưu và đóng vim. ( Escape, sau đó gõ :wq). Cuối cùng:

sudo vim /etc/init/transmission-down.conf

Dán cái này:

description "Script to remove firewall rules for transmission-daemon"

start on runlevel [!2345] or stopping openvpn-transmission
env PORT=51413

task

script
    # Take down IP route, firewall rules
    # It doesn't really matter if they don't get taken down, but this will be cleaner
    /usr/sbin/ufw delete reject out on eth0 from any port $PORT
    /usr/sbin/ufw delete reject in on eth0 to any port $PORT
    /usr/sbin/ufw delete deny in on tap1 to any
    /usr/sbin/ufw delete allow in on tap1 to any port $PORT proto udp

    /sbin/ip route flush cache

end script

Các tập lệnh này báo cho Upstart lắng nghe tín hiệu "truyền-vpn-up". Sau đó, tập lệnh "Transmission-up.conf" sẽ thiết lập các quy tắc định tuyến cần thiết để gửi lưu lượng truy cập từ địa chỉ VPN cục bộ qua giao diện VPN và đặt tường lửa cho phép lưu lượng truy cập từ VPN đến cổng nghe cho Truyền. Lưu lượng truy cập đến cổng nghe của Transmission từ giao diện LAN bình thường bị chặn. Tập lệnh "Transmission-daemon.conf" sau đó bắt đầu truyền-daemon với các cài đặt cần thiết để liên kết nó với địa chỉ IP VPN. Lưu ý rằng lệnh này cũng sẽ đảm bảo UPnP / NAT-PMP bị vô hiệu hóa - xem ghi chú của tôi ở đầu về chuyển tiếp cổng. "Đẹp -15" đặt Truyền dẫn có mức ưu tiên thấp hơn, điều mà tôi thấy hữu ích khi sử dụng BeagleBone có thông số kỹ thuật thấp hơn - đôi khi Truyền có thể hog tài nguyên, làm chậm hệ thống Ít nhất với mức độ ưu tiên thấp, các tác vụ hệ thống quan trọng hơn vẫn có thể chạy. Kịch bản "truyền xuống.conf" sẽ loại bỏ các quy tắc tường lửa khi VPN bị dừng. Ba tập lệnh khác nhau được sử dụng để truyền daemon có thể được chạy như một người dùng không có đặc quyền, nhưng các quy tắc tường lửa có thể được chạy dưới quyền root.

Bây giờ, hãy quay lại cài đặt OpenVPN và chỉnh sửa tập lệnh "định tuyến" và "xuống" để kích hoạt bắt đầu và dừng tập lệnh Truyền của chúng tôi.

sudo vim /opt/ibVPN/route-up.sh

Dán cái này vào vim:

#! /bin/bash

/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local

Tất cả các kịch bản này được nói với Upstart rằng truyền-daemon sẽ bắt đầu và cung cấp cho nó thông tin cần thiết để đính kèm với kết nối VPN.

sudo vim /opt/ibVPN/down.sh

Một lần nữa, dán nhiều hơn:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Kịch bản này thậm chí còn đơn giản hơn - nó báo hiệu cho việc truyền-daemon dừng lại.

Tại thời điểm này, có lẽ nên đảm bảo rằng chủ sở hữu của toàn bộ thư mục cấu hình VPN là người dùng root - vì các tập lệnh này chạy bằng root, bất kỳ ai có thể thay đổi chúng đều có thể chạy bất cứ thứ gì họ muốn với tư cách là người dùng root.

sudo chown root:root -R /opt/ibVPN
sudo chmod 700 -R /opt/ibVPN
sudo chmod 400 /opt/ibVPN/pass

Điều này bây giờ có nghĩa là chỉ người dùng root mới có thể sửa đổi hoặc xem cài đặt kết nối VPN.

OK, chúng ta sắp xong rồi! Hãy kiểm tra nếu thiết lập của chúng tôi hoạt động cho đến nay:

sudo openvpn --cd /opt/ibVPN --config config.ovpn

Kết nối lại với GUI web truyền tải và tiếp tục torrent hiện có hoặc thêm một torrent mới. Nó sẽ có thể tải xuống, có thể sau một vài phút chờ đợi cho các đồng nghiệp. Một cách tiện lợi mà tôi đã tìm thấy để kiểm tra xem nó có hoạt động hay không là nhìn vào iftop. Cài đặt iftop và chạy:

sudo apt-get install iftop
sudo iftop -i tap1

Màn hình này sẽ hiển thị tất cả các kết nối chạy qua VPN. Nếu torrent của bạn đang tải xuống và sử dụng VPN chính xác, sẽ có rất nhiều địa chỉ IP và tên máy chủ lưu trữ ở đây. Cũng xem iftop cho kết nối LAN:

sudo iftop -i eth0

Tại đây, bạn sẽ thấy một lượng lớn lưu lượng truy cập đến một địa chỉ IP duy nhất, là máy chủ VPN và sau đó chỉ lưu lượng tối thiểu đến các thiết bị LAN khác - giả sử rằng bạn không chạy các dịch vụ khác trên BeagleBone.

Bạn có thể xác nhận rằng VPN đang hoạt động bằng cách làm theo các hướng dẫn sau .
Trang web này cho phép bạn tải xuống một torrent để xem địa chỉ IP mà các đồng nghiệp khác sử dụng để kết nối với bạn - nếu mọi thứ đang hoạt động thì đây sẽ là địa chỉ IP VPN chứ không phải địa chỉ IP WAN của riêng bạn.

Nếu bạn gặp sự cố, bạn có thể xem nhật ký lỗi Khởi động bằng cách thực hiện:

sudo tail -f /var/log/upstart/transmission-daemon.log

Trong cửa sổ terminal / SSH riêng biệt, hãy thử chạy lệnh tail trong khi bắt đầu kết nối VPN như trên và tìm kiếm bất kỳ thông báo lỗi nào. Hy vọng rằng bạn có thể giải quyết vấn đề khi nhìn thấy các thông báo lỗi, nếu không tìm hiểu kỹ về Internet hoặc đăng bình luận.

Cấu hình tất cả để bắt đầu tự động

Nếu bạn hài lòng với việc ban hành lệnh thủ công để bắt đầu đường hầm OpenVPN hoặc bạn muốn thực hiện nó với tập lệnh của riêng bạn, thì bạn đã hoàn thành. Nhưng tôi muốn nó khởi động khi khởi động, vì vậy tôi đã tạo một kịch bản Upstart khác để khởi chạy OpenVPN.

sudo vim /etc/init/openvpn-transmission.conf

Đây là điều cuối cùng chúng ta phải dán!

description "OpenVPN client, with attached transmission-daemon"

start on started networking
stop on runlevel [!2345] or stopped networking

# Give time for Transmission to send info to trackers, wait for graceful close
kill timeout 45

# Start the OpenVPN tunnel again if it stops for some reason
respawn
# If it stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60


exec openvpn --cd /opt/ibVPN --config config.ovpn

post-stop script
    # Pause for a few seconds, before exiting
    /bin/sleep 3s
end script

Tất cả điều này chỉ là chờ hệ thống báo hiệu rằng mạng đã sẵn sàng, và sau đó nó sẽ khởi động đường hầm OpenVPN - sẽ lần lượt bắt đầu Truyền. Khi hệ thống bị tắt hoặc nếu tắt mạng vì một số lý do, Upstart sẽ xóa các quy tắc tường lửa và đóng daemon truyền. Đơn giản! Điều này cũng sẽ tiếp tục hoạt động sau khi khởi động lại, vì vậy bây giờ bạn đã thiết lập xong.

Để tương tác với Truyền, sử dụng GUI web như chúng tôi đã làm trong giai đoạn thiết lập. Cũng có thể làm cho GUI có thể truy cập qua Internet, bằng cách thiết lập chuyển tiếp cổng. Có rất nhiều hướng dẫn về cách làm điều này, vì vậy tôi sẽ không lặp lại ở đây.

Đối với việc tải xuống hoàn thành từ BeagleBone, tôi đang sử dụng NFS. Tôi có thể nhận được tốc độ sao chép khoảng 8 MB / giây qua mạng LAN từ BeagleBone sang máy tính để bàn của mình - điều này khá tốt cho một thiết bị có công suất thấp như vậy. Ubuntu cung cấp một số thông tin hữu ích để thiết lập điều này.


Ồ Bạn đã dành bao lâu để tìm kiếm tất cả những thứ này?
Ismael Miguel

Haha, khá lâu rồi Tôi đã thực hiện nó một lần trước đây trên bộ định tuyến DD-WRT, sau đó khi tôi làm lại cho BeagleBone, tôi nghĩ rằng tôi đã viết nó lên để tôi không quên làm thế nào để làm điều đó. : D
seanlano

1
Bạn cũng nên đọc bài này: unix.stackexchange.com/questions/88693/ (Đây là một câu trả lời tuyệt vời.) Điều này sẽ giúp bạn, tôi chắc chắn về điều đó.
Ismael Miguel

3
Tôi mới nhận ra, sau khi đặt máy chủ DNS của mình sử dụng OpenDNS và xem qua các số liệu thống kê, cấu hình này sẽ rò rỉ DNS thông qua kết nối WAN thông thường . Tôi sẽ điều tra thêm để xem liệu tôi có thể khắc phục điều này không. Dù sao thì tôi cũng sẽ tiếp tục chạy, vì bản thân kết nối thông qua VPN - nhưng nó không lý tưởng.
seanlano

1
@seanlano Cảm ơn bạn đã chú ý đến điều này. Hãy cho chúng tôi biết nếu / khi bạn tìm thấy một sửa chữa.
Winterflags 7/03/2016

7

Chỉ cần làm việc này bằng SystemD nên tôi nghĩ tôi muốn chia sẻ. Tôi đã đặt tất cả các tập lệnh, cấu hình và chứng chỉ của mình vào cùng thư mục mà tôi sẽ đề cập đến như/etc/openvpn/myprovider

Cấu hình OpenVPN

Điều này phụ thuộc vào VPN cụ thể của bạn, nhưng một điểm khác biệt so với cấu hình của @ seanlano là tôi chỉ sử dụng route-uptập lệnh. Vì vậy, những thứ bạn cần ngoài cấu hình được cung cấp làm việc , là những dòng sau:

route-noexec
route-up "/etc/openvpn/myprovider/transmission-route-up.sh"

Nơi bạn đặt transmission-route-up.shkịch bản bất cứ nơi nào bạn muốn. Lưu ý sự vắng mặt của một downkịch bản. (VPN của tôi đã sử dụng tập lệnh tùy chỉnh xuống nên dù sao nó cũng bị xung đột).

/etc/openvpn/myprovider/transmission-route-up.sh:

#!/bin/sh

# Print environment variables for transmission's benefit
printenv > /etc/openvpn/myprovider/vpn.env


# Set up VPN routes
ip route add default via $route_vpn_gateway dev $dev table 10

ip rule add from $ifconfig_local/32 table 10
ip rule add to $route_vpn_gateway/32 table 10

ip route flush cache


# Add firewall rules
iptables -A INPUT -i $dev -p udp --dport 24328 -j ACCEPT
iptables -A INPUT -i $dev -p tcp --dport 24328 -j ACCEPT

iptables -A OUTPUT -o $dev -p udp --sport 24328 -j ACCEPT
iptables -A OUTPUT -o $dev -p tcp --sport 24328 -j ACCEPT

Dòng đầu tiên, là printenv, quan trọng. Đặt nó bất cứ nơi nào bạn thích, nó sẽ được sử dụng trong dịch vụ SystemD sau này. Tôi đặt nó trong cùng thư mục với cấu hình vpn của tôi.

Thay thế 24328 bằng bất cứ cổng nào mà trình truyền của bạn nên nghe. Tôi sử dụng iptables (sử dụng Debian), vì vậy bạn có thể thay thế các dòng đó bằng các dòng ufw từ cấu hình của @ seanlano.

Dịch vụ VPN hệ thống

Đây là dịch vụ tự động khởi động VPN cho chúng tôi. Xác minh rằng đường dẫn đến openvpn là chính xác trên máy của bạn và đường dẫn đến tệp cấu hình cũng đúng. Bạn phải chỉ định đầy đủ đường dẫn trong các dịch vụ SystemD.

/etc/systemd/system/my-vpn.service:

[Unit]
Description=VPN connection
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/vpn.pid
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/myprovider --config /etc/openvpn/myprovider/myconfig.ovpn --daemon --writepid /var/run/openvpn/vpn.pid

[Install]
WantedBy=multi-user.target

Kích hoạt dịch vụ VPN với:

systemctl enable my-vpn.service

Và kiểm tra nó với:

systemctl start my-vpn.service
systemctl status my-vpn.service

Nếu nó bắt đầu / chạy, bạn tốt.

SystemD truyền-daemon.service

Kịch bản này yêu cầu dịch vụ vpn, vì vậy nếu vpn bị hỏng, truyền-daemon cũng đi xuống. Điều này rất hữu ích nếu vpn được khởi động lại và bạn nhận được một địa chỉ IP mới, bởi vì việc truyền sẽ cần phải khởi động lại và liên kết lại sau đó, điều này sẽ được xử lý tự động. Lưu ý rằng chúng tôi sử dụng các biến môi trường mà chúng tôi đã in trongroute-up tập lệnh trước đó.

/etc/systemd/system/transmission-daemon.service:

[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target my-vpn.service
Requires=my-vpn.service

[Service]
User=debian-transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

Kích hoạt nó

systemctl enable transmission-daemon.service

Và bắt đầu nó

systemctl start transmission-daemon.service

Khi bạn khởi động lại, tất cả sẽ tự động bắt đầu (theo thứ tự!). Lưu ý rằng việc sử dụng Type=simpletrong dịch vụ vpn gây ra một số vấn đề về thời gian đặt hàng tập lệnh, do đó tôi khuyên bạn nên sử dụngforking thay thế.

Bạn có thể chỉ định một địa chỉ IP thực tế cho rpc-bind-addressnếu bạn muốn hạn chế hơn (đây là địa chỉ nghe GUI web, không phải là VPN-ip của bạn). Và nếu bạn muốn chạy truyền với tốt, chỉ cần thay đổi ExecStartdòng và thêm /usr/bin/nice -n15vào đầu.

Xử lý thay đổi địa chỉ

Một điều tôi đã lưu ý theo thời gian là nếu kết nối vpn vì một lý do nào đó có địa chỉ IP mới, việc truyền sẽ vẫn bị ràng buộc với địa chỉ cũ và ngừng hoạt động. Và chỉ đơn giản là systemctl restart transmission-daemon.servicekhông cắt nó. Nó cần phải dừng lại hoàn toàn, và sau đó bắt đầu mới.

Không biết tại sao, nhưng vì lý do đó, tôi đã thêm các dòng sau vào gốc crontab ( sudo crontab -e):

# m h  dom mon dow   command
0 6 * * * /bin/systemctl stop my-vpn.service; /bin/systemctl start my-vpn.service
1 6 * * * /bin/systemctl stop transmission-daemon.service; /bin/systemctl start transmission-daemon.service

Chỉ cần quan tâm, điều này cũng chạy trên BeagleBone? Nếu vậy, bạn có thấy vấn đề về hiệu suất với Transmission không? Ngoài ra, viết tuyệt vời. :)
seanlano

À không. Nó chạy trên máy tính để bàn bình thường của tôi và tôi nhận thấy không có vấn đề gì ở đó.
Jonas Kalderstam

Đủ công bằng. Hoạt động tốt với tôi trên máy Intel, tôi đã hy vọng tôi có thể tạo ra một hộp torrent giá rẻ với bộ xử lý ARM - nhưng rõ ràng là không phải vậy.
seanlano

Kiểm tra rtorrent. Nó rất hiệu quả
Jonas Kalderstam

Cảm ơn, tôi sẽ làm vậy. Những thứ khác chạy tốt trên hộp ARM, vì vậy có thể rtorrent sẽ hoạt động bình thường.
seanlano

3

Tôi nhận thấy bạn đã đề cập rằng Truyền không đi qua VPN cho UPnP / NAT-PMP. Tôi cũng nhận thấy điều này và tạo ra một bản vá cho Transmission để nó tôn vinh cài đặt bind-address-ipv4 cho UPnP. NAT-PMP khó thực hiện hơn một chút vì bạn cần xác định cổng mặc định. UPnP là một trong những chính đang được sử dụng những ngày này, mặc dù vậy, nó có lẽ là đủ tốt. Tôi đã đăng nhập đây là một lỗi trên trang web trac.transmissionbt và cung cấp bản vá. Hy vọng nó sẽ được kết hợp trong một bản phát hành trong tương lai. https://trac.transmissionbt.com/ticket/5990

Một tùy chọn khác ngay bây giờ nếu bạn không muốn biên dịch lại là chạy thủ công upnpc từ gói miniupnpc. Ví dụ

sudo apt-get install miniupnpc
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 TCP
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 UDP

Trong đó 10.10.10.51 là IP VPN của bạn và 51515 là cổng TCP / UDP được yêu cầu của bạn.

Tôi không chắc việc chuyển tiếp là tốt trong bao lâu. Ngoài ra, bạn có thể muốn sử dụng tùy chọn '-d' để xóa cổng của mình khi ngắt kết nối. Tôi thấy rằng nếu tôi không, tôi không thể lấy lại cùng một cổng nếu tôi đăng nhập lại vào VPN.

Chúc mừng


Tôi đã dành nhiều năm cố gắng để tìm một giải pháp như thế này, tôi ước tôi đã tìm thấy miniupnpc! Và hy vọng bản vá được hợp nhất và vấn đề này sẽ được khắc phục mãi mãi. Trong khi đó, tôi chắc chắn sẽ cố gắng sử dụng mẹo tiện dụng của bạn.
seanlano
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.