หมายเหตุ: (2016-02-22) ฉันรู้ว่าการตั้งค่านี้ทำให้การสืบค้น DNS รั่วไหลไปยังตัวติดตาม torrent ผ่าน WAN ปกติแทนที่จะส่งผ่าน VPN ฉันกำลังตรวจสอบวิธีการแก้ไขปัญหานี้ ฉันจะยังคงใช้งานการกำหนดค่าของฉันต่อไปเนื่องจากการเชื่อมต่อนั้นใช้ VPN อย่างถูกต้อง
อัปเดต: ฉันสังเกตเห็นว่าเมื่อฉันตั้งค่าการส่งให้ดาวน์โหลดข้ามคืนบน Beaglebone การใช้งาน CPU จะลดลงถึง 100% หลังจากผ่านไประยะหนึ่ง ดูเหมือนจะไม่เกิดขึ้นหลังจากช่วงเวลาเดียวกันบางครั้งก็ไม่เป็นไรทั้งคืนเวลาอื่น ๆ ก็ต้องดิ้นรนหลังจาก 10 นาที นอกจากนี้ยังสามารถกู้คืนได้ด้วยการหยุด torrents ทั้งหมดและรอให้โหลด CPU กลับสู่ปกติจากนั้นเริ่มต้นอีกครั้ง ฉันยังคงตรวจสอบ วิธีแก้ปัญหาอาจเป็นการหยุดชั่วคราวและเล่นเพลงต่อเป็นระยะ ๆ ถึงแม้ว่าจะไม่ได้เป็นวิธีแก้ปัญหาที่ดีมาก
หมายเหตุปัญหานี้ใช้กับ Beaglebone และอุปกรณ์ ARM อื่น ๆ เท่านั้น ฉันไม่เคยมีปัญหานี้ในซีพียู x86
บทนำ
ฉันได้พัฒนาและทดสอบโซลูชันนี้สำหรับ Ubuntu 14.04 ที่ทำงานบน BeagleBone Black ผู้ให้บริการ VPN ฉันใช้เรียกว่าIbvpn ควรทำงานกับฮาร์ดแวร์ที่ได้รับการสนับสนุนแม้ว่า (เช่นบนคอมพิวเตอร์ "ปกติ" x86) กับผู้ให้บริการ VPN ที่เข้ากันได้กับ OpenVPN - และน่าจะใช้งานได้ตั้งแต่ 14.10 ขึ้นไป ในบางจุดฉันเชื่อว่า Ubuntu จะใช้ SystemD สำหรับการบู๊ตซึ่งจะหมายถึงสคริปต์ Upstart ที่ใช้ที่นี่จะต้องมีการโยกย้าย อัปเดต: Jonas Kalderstam มีคำตอบด้านล่างสำหรับการใช้ SystemD ฉันยังสมมติว่ามีการใช้ ufw เป็นไฟร์วอลล์หากคุณใช้สิ่งที่แตกต่างจากนั้นคำสั่ง ufw ที่นี่จะต้องเปลี่ยน
ฉันคิดว่างานทั้งหมดทำผ่านการเชื่อมต่อ SSH กับระบบแม้ว่ามันจะทำงานได้ดีเช่นกันหากพิมพ์ลงในเทอร์มินัลทางกายภาพ
นี่คือการสอนที่ค่อนข้างยาวโปรดอ่านทั้งหมดก่อนและให้แน่ใจว่าคุณพอใจกับสิ่งที่คุณจะทำ
ฉันยังสังเกตเห็นว่าการส่งไม่ได้ผูกอย่างถูกต้องกับที่อยู่ IP สำหรับการส่งข้อมูล UPnP / NAT-PMP - เช่นข้อมูล torrent ถูกต้องผ่าน VPN แต่ถ้าเปิดใช้งานการส่งต่อพอร์ต UPnP การส่งจะขอพอร์ตไปข้างหน้าจากเราเตอร์ท้องถิ่น ไม่ใช่ผ่าน VPN จากเซิร์ฟเวอร์ VPN ดังนั้นฉันจึงทำให้สคริปต์ Upstart ปิดใช้งานการส่งต่อพอร์ตเนื่องจากอาจดูเหมือนว่าใช้งานได้ แต่ก็ไม่ได้ มันควรจะเป็นไปได้ที่จะใช้ iptables และ iproute เพื่อบังคับให้ทราฟฟิกทั้งหมดจากผู้ใช้ที่ส่งผ่าน debian ผ่าน VPN แต่ฉันยังคงมองหาสิ่งนี้อยู่ มันควรจะทำงานหากเส้นทางเริ่มต้นถูกเปลี่ยนเพื่อส่งข้อมูลอินเทอร์เน็ตทั้งหมดผ่าน VPN แต่ฉันไม่ต้องการทำเช่นนั้นเพราะฉันใช้เซิร์ฟเวอร์นี้เพื่อทำสิ่งอื่นเช่นกันและสิ่งนี้จะทำให้การอัปเดตระบบทั้งหมดผ่าน VPNคำถามนี้มีข้อมูลเพิ่มเติมหากคุณต้องการให้ UPnP ทำงานผ่าน VPNอย่างแท้จริง
อัปเดต: falk0069 มีเคล็ดลับที่ยอดเยี่ยมด้านล่างเพื่อช่วยสนับสนุน UPnP ผ่าน VPN
การติดตั้งและกำหนดค่า OpenVPN
ฉันขอแนะนำให้คุณลองเชื่อมต่อ VPN ของคุณให้ทำงานโดยใช้ Ubuntu ก่อนที่จะลองใช้งานที่นี่ - จากเดสก์ท็อป สิ่งนี้จะยืนยันว่าคุณมีการกำหนดค่าที่ถูกต้องและลดเวลาในการดีบัก
ก่อนอื่นให้ติดตั้งแพ็คเกจที่จำเป็น
sudo apt-get install openvpn
จากนั้นสร้างไดเรกทอรีเพื่อจัดเก็บไฟล์กำหนดค่าฉันใช้ / opt / ibVPN เนื่องจากเป็นผู้ให้บริการที่ฉันกำลังใช้ เปลี่ยนเป็นสิ่งที่คุณต้องการ
sudo mkdir /opt/ibVPN
สิ่งแรกที่ต้องทำในไดเรกทอรีใหม่นี้คือการสร้างไฟล์ปรับแต่งสำหรับใช้งานไคลเอนต์ VPN ibVPN ให้ไฟล์กำหนดค่าพื้นฐานสำหรับผู้ใช้ Linux ซึ่งส่วนใหญ่ฉันเพิ่งคัดลอกและวาง
cd /opt/ibVPN
sudo vim config.ovpn
คัดลอกและวางเวอร์ชันที่แก้ไขของคุณลงในเสียงเรียกเข้าโดยใช้การตั้งค่าสำหรับผู้ให้บริการ VPN ของคุณ (FYI, วางในเทอร์มินัล Ubuntu คือCtrl+Shift+V) คุณควรจะได้รับสิ่งนี้จากผู้ให้บริการ VPN ของคุณ
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"
สำหรับผู้ที่ไม่คุ้นเคยกับเสียงเรียกเข้าให้กด Insert เพื่อพิมพ์หรือวางข้อความจากนั้นกด Escape และพิมพ์ :wq เพื่อบันทึกและออก แน่นอนคุณไม่ต้องใช้เสียงเรียกเข้า - ตัวแก้ไขข้อความใด ๆ ก็ได้
ฉันจะอธิบายไฟล์กำหนดค่านี้อย่างรวดเร็ว: 18 บรรทัดแรกระบุการตั้งค่าเฉพาะที่จะใช้กับเซิร์ฟเวอร์สิ่งเหล่านี้มาจาก ibVPN - คุณอาจแตกต่างกันเล็กน้อยหากคุณมีผู้ให้บริการที่แตกต่างกัน บรรทัดถัดไปเป็นตัวเลือกการแก้ไขที่ฉันได้ระบุไว้
หากไฟล์การตั้งค่าของคุณมีบรรทัดใด ๆauth-user*ให้แสดงความคิดเห็นเหล่านี้ เพื่อให้การตั้งค่านี้ทำงานโดยอัตโนมัติเราต้องมีไฟล์ที่มีชื่อผู้ใช้และรหัสผ่านอยู่ด้วยดังนั้นโปรดตรวจสอบให้แน่ใจว่ารหัสผ่านที่คุณเลือกสำหรับผู้ให้บริการ VPN นั้นแข็งแกร่งสุ่มและไม่ซ้ำกัน
auth-user-pass passบอก OpenVPN ที่จะมองหาไฟล์ที่เรียกว่าpassการอ่านของผู้ใช้และรหัสผ่านจาก
auth-nocache ลบรหัสผ่านออกจากหน่วยความจำซึ่งอาจเพิ่มความปลอดภัยเล็กน้อยหากคุณกังวล
persist-tun จะพยายามเก็บที่อยู่ IP เดิมจากเซิร์ฟเวอร์หากการเชื่อมต่อของคุณหลุดออกซึ่งหวังว่าจะทำให้การเริ่มต้นและหยุดการส่งสัญญาณของดีมอนน้อยลง
route-noexecบอกไคลเอ็นต์ OpenVPN ว่าจะไม่ใช้เส้นทางที่เซิร์ฟเวอร์จัดเตรียมไว้ให้โดยอัตโนมัติซึ่งจะดึงการรับส่งข้อมูลเครือข่ายทั้งหมดผ่าน VPN เราแค่ต้องการส่งปริมาณการใช้งานฝนตกหนักดังนั้นเราจะต้องใช้การตั้งค่าเส้นทางที่แตกต่างกัน
lport 1195 แจ้งให้ไคลเอ็นต์ OpenVPN ใช้พอร์ต 1195 แทน 1194 ในกรณีของฉันฉันต้องการเรียกใช้เซิร์ฟเวอร์ OpenVPN บนอุปกรณ์เดียวกันและเซิร์ฟเวอร์จะต้องใช้พอร์ต 1194 แม้ว่าคุณจะไม่ได้ใช้เซิร์ฟเวอร์ OpenVPN ก็ตาม ไม่เจ็บที่จะทำการเปลี่ยนแปลงนี้
ฉันเปลี่ยนบรรทัดdev tapเป็นdev tap1เพื่อบังคับให้อุปกรณ์เสมือนเป็น tap1 แทนที่จะได้รับมอบหมายจาก OpenVPN อีกครั้งเพราะทำงานเซิร์ฟเวอร์ OpenVPN แยกต่างหาก แม้ว่าคุณจะไม่ได้ใช้เซิร์ฟเวอร์ VPN การเปลี่ยนแปลงนี้ก็ไม่สำคัญ สคริปต์ไฟร์วอลล์ถูกเขียนขึ้นเพื่อใช้tap1ดังนั้นหากคุณต้องการใช้อุปกรณ์อื่นดังนั้นอย่าลืมเปลี่ยนสคริปต์เหล่านั้นตามความเหมาะสม
lladdr 00:FF:11:AA:BB:CC บอกให้ OpenVPN กำหนดอินเตอร์เฟสการแตะให้มีที่อยู่ MAC นี้ซึ่งสามารถเป็นประโยชน์สำหรับกฎไฟร์วอลล์ iptables
route-upและdownเรียกใช้สคริปต์เพื่อเริ่มและหยุด Transmission-daemon ตามต้องการ - สิ่งเหล่านี้จำเป็นสำหรับที่นี่เพราะมันทำงานด้วยตัวแปรสภาพแวดล้อมที่มีข้อมูลเกี่ยวกับการเชื่อมต่อ
ในกรณีของฉันฉันมีใบรับรองเซิร์ฟเวอร์จากผู้ให้บริการ VPN ซึ่งต้องอยู่ในไดเรกทอรีเดียวกับไฟล์ปรับแต่ง
sudo vim /opt/ibVPN/ibvpn.com.crt
คัดลอกและวางสิ่งนี้หรือย้ายผ่าน SCP หรือ 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-----
เห็นได้ชัดว่าถ้าคุณไม่ได้ใช้บัญชี ibVPN ใบรับรองของคุณจะแตกต่างกัน
ตอนนี้ให้ทำไฟล์รหัสผ่าน:
sudo vim /opt/ibVPN/pass
บรรทัดแรกต้องเป็นชื่อผู้ใช้เต็มรูปแบบจากนั้นบรรทัดที่สองจะต้องเป็นรหัสผ่าน ต้องเป็นเนื้อหาของไฟล์นี้เท่านั้น
you@address.com
myBIGstrongpassword1234567890
เราต้องรักษาความปลอดภัยการอนุญาตไฟล์นี้มิฉะนั้น OpenVPN จะไม่เริ่ม
sudo chmod 400 pass
สิ่งนี้จะทำให้ไฟล์เป็นแบบอ่านอย่างเดียวและสำหรับเจ้าของเท่านั้น (กล่าวคือไม่มีผู้ใช้รายอื่นสามารถอ่านได้เลย)
คำสั่งเหล่านี้จะสร้างไฟล์เพื่อให้ทำงานเมื่อเริ่มต้นและตั้งค่าให้สามารถทำงานได้โดยรูทเท่านั้น
sudo touch route-up.sh
sudo touch down.sh
sudo chmod 700 route-up.sh
sudo chmod 700 down.sh
ณ จุดนี้อาจเป็นความคิดที่ดีที่จะทดสอบว่าการเชื่อมต่อ VPN ใช้งานได้จริงหรือไม่ เริ่มการเชื่อมต่อด้วย:
sudo openvpn --cd /opt/ibVPN --config config.ovpn
คุณจะเห็นคำเตือนว่าคำสั่งภายนอกขึ้นและลงไม่สามารถรันได้ แต่ไม่ต้องกังวลเกี่ยวกับสิ่งนั้น หากใช้งานได้คุณจะเห็นInitialization Sequence Completedขั้ว กดControl+Cเพื่อยุติการเชื่อมต่อ หากไม่ได้ผลคุณจะต้องตรวจสอบสาเหตุและแก้ไขก่อนดำเนินการต่อ ฉันพบว่าบางครั้งต้องใช้เวลาสักครู่จึงจะเริ่มทำงานได้ ตรวจสอบให้แน่ใจว่าไฟล์รหัสผ่านของคุณถูกต้อง มีแหล่งข้อมูลมากมายบนอินเทอร์เน็ตเกี่ยวกับ OpenVPN ดังนั้นให้ดูรอบ ๆ
ณ จุดนี้มันอาจเป็นวิธีที่ง่ายที่สุดในการดำเนินการส่งและทำงาน เมื่อคุณแน่ใจว่าทั้ง VPN และ Transmission สามารถทำงานแยกกันได้ก็สามารถรวมกันได้
การติดตั้งและกำหนดค่าการส่ง
ติดตั้งแพ็คเกจที่ต้องการ:
sudo apt-get install transmission-daemon
โดยค่าเริ่มต้นเกียร์จะทำงานโดยอัตโนมัติเมื่อบูต เนื่องจากในที่สุดเราจะใช้ OpenVPN เพื่อเริ่มการส่งข้อมูลเราจึงต้องการปิดใช้งานสิ่งนี้ หากต้องการทำเช่นนั้นให้แก้ไขไฟล์กำหนดค่าสำหรับ Transmission-daemon
sudo vim /etc/default/transmission-daemon
และเปลี่ยนบรรทัดต่อไปนี้เพื่ออ่าน:
ENABLE_DAEMON=0
ตอนนี้การส่งข้อมูลจะไม่เริ่มในการบู๊ต
ตอนนี้เรามาสร้างไดเรกทอรีเพื่อให้การตั้งค่าการส่งข้อมูลอยู่และเพื่อให้ torrents ที่ดาวน์โหลดมาเข้าไป สิ่งนี้ถือว่าคุณได้ตั้งค่าดิสก์บางประเภทแล้วและติดตั้งที่ / media / arm-disk / เพื่อความปลอดภัย daemon จะถูกเรียกใช้โดยผู้ใช้ของตัวเองแทนที่จะเป็นรูทหรือเป็น "ubuntu" ผู้ใช้ใหม่ถูกสร้างขึ้นโดยตัวติดตั้งสำหรับ transmission-daemon, "debian-transmission" ผู้ใช้รายนี้จำเป็นต้องเป็นเจ้าของโฟลเดอร์ที่เราสร้างขึ้นและมีการอ่านและเขียนการเข้าถึงที่เก็บข้อมูลสำหรับเพลงที่กำลังดาวน์โหลด
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
ตอนนี้เราต้องเริ่มการส่งข้อมูลสั้น ๆ เพื่อที่จะสร้างไฟล์การตั้งค่าที่เราต้องการ:
sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground
คำสั่งนี้เริ่ม transmission-daemon ในฐานะผู้ใช้ debian-transmission บอกให้ใช้ไดเร็กทอรี / opt / transmission สำหรับไฟล์การตั้งค่าและบอกให้มันยังคงทำงานในเบื้องหน้า เมื่อมันทำงานเป็นเวลาสองสามวินาทีให้กดControl+Cเพื่อจบ ตอนนี้เราสามารถแก้ไขไฟล์การตั้งค่า
sudo -u debian-transmission vim /opt/transmission/settings.json
ตอนนี้เราต้องเปลี่ยนเป็นบรรทัดต่อไปนี้จากค่าเริ่มต้นเป็นอ่าน:
"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.*",
บันทึกและออก (Escape พิมพ์: wq และกด Enter)
การแก้ไขระดับกลางสองรายการจะช่วยให้สามารถใช้ไดเรกทอรี "ไม่สมบูรณ์" โดยแยก torrents ที่เสร็จแล้วออกจากรายการที่ยังไม่เสร็จ มันไม่จำเป็นเลย แต่ฉันคิดว่ามันมีประโยชน์มาก แก้ไขล่าสุดช่วยให้เว็บ GUI สามารถเข้าถึงได้โดยคอมพิวเตอร์เครื่องใดก็ได้บน LAN (สมมติว่าเครือข่ายย่อย LAN ของคุณคือ 192.168.1.0 แก้ไขสิ่งนี้หากมันแตกต่างกัน)
ตอนนี้เป็นความคิดที่ดีที่จะใช้การส่งข้อมูลอีกครั้งเพื่อดูว่าทำงานได้หรือไม่และสามารถดาวน์โหลดฝนตกหนักได้ เราจะใช้หน้าต่างเว็บเบราว์เซอร์เพื่อเข้าถึง GUI และเพื่อเพิ่มฝนตกหนัก อันดับแรกให้อนุญาตการเข้าถึงเว็บ GUI ผ่านไฟร์วอลล์จาก LAN จากนั้นเรียกใช้ transmission-daemon อีกครั้ง
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
เยี่ยมชม URL นี้ใน Firefox (หรือเบราว์เซอร์ที่คุณต้องการ): http://XXX.XXX.XXX.XXX:9091โดยที่ XXX จะถูกแทนที่ด้วยที่อยู่ของเซิร์ฟเวอร์ของคุณบน LAN (เช่น 192.168.1.10) ค้นหาทอร์เรนต์เพื่อดาวน์โหลดเช่น Big Buck Bunny ใน 1080p60hz นี่เป็นหนังสั้นฟรีให้ดาวน์โหลดฟรีอย่างถูกกฎหมาย ใน Transmission GUI คลิกที่ปุ่ม "Open Torrent" และวางลิงค์นี้ (หรือฝนตกหนักอื่น ๆ ที่คุณชอบ) ลงในช่องแรก จากนั้นกด "อัปโหลด" หากการส่งกำลังทำงานอย่างถูกต้องฝนตกหนักจะเริ่มดาวน์โหลด หากไม่เป็นเช่นนั้นคุณจะต้องทราบสาเหตุก่อนดำเนินการต่อ มีทรัพยากรมากมายบนอินเทอร์เน็ตสำหรับการใช้ transmission-daemon อาจเป็นฝนตกหนักที่คุณเลือกไม่ทำงานลองใช้งานก่อน
เมื่อการดาวน์โหลดเสร็จสิ้นให้กดControl+Cในหน้าต่างเทอร์มินัลเพื่อหยุด transmission-daemon
กำหนดค่าการส่งการเชื่อมต่อไปยังอินเตอร์เฟส VPN
ตอนนี้ให้สร้างสคริปต์ Upstart ซึ่งจะใช้ในการเริ่มส่งเมื่อ VPN พร้อม
sudo mv /etc/init/transmission-daemon.conf /etc/init/transmission-daemon.conf.bak
ไม่ต้องกังวลถ้าเรื่องนี้บ่นมันเป็นเพียงการสำรองไฟล์ Upstart ถ้ามีอยู่ - อาจไม่มี ลองเปิดกลุ่มเพื่อแก้ไขอันใหม่:
sudo vim /etc/init/transmission-daemon.conf
วางสิ่งนี้ลงในเครื่องมือแก้ไข:
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
บันทึกและปิดเป็นกลุ่ม ( Escapeจากนั้นพิมพ์:wq) อีกครั้งเป็นกลุ่มเปิด:
sudo vim /etc/init/transmission-up.conf
และวางสิ่งนี้:
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
อีกครั้งบันทึกและปิดเป็นกลุ่ม ( Escapeจากนั้นพิมพ์:wq) สุดท้าย:
sudo vim /etc/init/transmission-down.conf
วางสิ่งนี้:
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
สคริปต์เหล่านี้บอกให้ Upstart รับฟังสัญญาณ "transmission-vpn-up" จากนั้นสคริปต์ "transmission-up.conf" จะตั้งค่ากฎการกำหนดเส้นทางที่จำเป็นเพื่อส่งปริมาณข้อมูลจากที่อยู่ VPN ในระบบผ่านอินเตอร์เฟส VPN และตั้งค่าไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูลจาก VPN ไปยังพอร์ตการรับฟังสำหรับการส่ง ปริมาณข้อมูลที่ส่งตรงไปยังพอร์ตการฟังของ Transmission จากอินเตอร์เฟส LAN ปกติจะถูกปิดกั้น จากนั้นสคริปต์ "transmission-daemon.conf" จะเริ่ม transmission-daemon ด้วยการตั้งค่าที่จำเป็นเพื่อเชื่อมโยงกับที่อยู่ IP VPN โปรดทราบว่าคำสั่งนี้จะให้แน่ใจว่าปิดใช้งาน UPnP / NAT-PMP ด้วย - ดูบันทึกของฉันที่ด้านบนเกี่ยวกับการส่งต่อพอร์ต "nice -15" ตั้งค่าการส่งให้มีลำดับความสำคัญต่ำกว่าซึ่งฉันพบว่ามีประโยชน์เมื่อใช้ BeagleBone ที่ต่ำกว่า - บางครั้งการส่งอาจเป็นทรัพยากรสำหรับหมู ซึ่งทำให้ระบบช้าลง อย่างน้อยเมื่อมีลำดับความสำคัญต่ำงานระบบที่สำคัญยังคงสามารถทำงานได้ สคริปต์ "transmission-down.conf" จะลบกฎไฟร์วอลล์เมื่อ VPN หยุดทำงาน มีการใช้สคริปต์ที่แตกต่างกันสามตัวเพื่อให้ transmission-daemon สามารถรันในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษได้ แต่กฎของไฟร์วอลล์สามารถเรียกใช้ในฐานะรูท
ตอนนี้เราจะกลับไปที่การตั้งค่า OpenVPN และแก้ไขสคริปต์ "การจัดเส้นทาง" และ "ลง" เพื่อเริ่มและหยุดสคริปต์ส่งของเรา
sudo vim /opt/ibVPN/route-up.sh
วางสิ่งนี้ลงในกลุ่ม:
#! /bin/bash
/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local
สคริปต์ทั้งหมดนี้พูดกับ Upstart ที่ transmission-daemon ควรเริ่มต้นและให้ข้อมูลที่จำเป็นในการเชื่อมต่อกับการเชื่อมต่อ VPN
sudo vim /opt/ibVPN/down.sh
การวางเพิ่มเติมอีกครั้ง:
#! /bin/bash
/sbin/initctl emit transmission-vpn-down
สคริปต์นี้ง่ายยิ่งขึ้น - เป็นสัญญาณสำหรับการส่ง -demon เพื่อหยุด
ณ จุดนี้อาจเป็นความคิดที่ดีที่จะตรวจสอบให้แน่ใจว่าเจ้าของโฟลเดอร์การกำหนดค่า VPN ทั้งหมดเป็นผู้ใช้รูท - เนื่องจากสคริปต์เหล่านี้ทำงานเป็นรูทใครก็ตามที่สามารถเปลี่ยนแปลงได้
sudo chown root:root -R /opt/ibVPN
sudo chmod 700 -R /opt/ibVPN
sudo chmod 400 /opt/ibVPN/pass
นี่หมายความว่าเฉพาะผู้ใช้รูทเท่านั้นที่สามารถแก้ไขหรือดูการตั้งค่าการเชื่อมต่อ VPN
ตกลงเราเกือบจะเสร็จแล้ว! ลองทดสอบว่าการตั้งค่าของเราใช้งานได้หรือไม่:
sudo openvpn --cd /opt/ibVPN --config config.ovpn
เชื่อมต่ออีกครั้งกับ Transmission web GUI และเริ่มต้นฝนตกหนักที่มีอยู่เดิมหรือเพิ่มใหม่ มันควรจะสามารถดาวน์โหลดได้หลังจากรอสองสามนาทีเพื่อรอเพื่อน วิธีที่ดีที่ฉันพบในการทดสอบว่ามันใช้งานได้หรือไม่คือการดู iftop ติดตั้ง iftop และเรียกใช้:
sudo apt-get install iftop
sudo iftop -i tap1
หน้าจอนี้จะแสดงการเชื่อมต่อทั้งหมดที่ทำงานผ่าน VPN หากฝนตกหนักของคุณกำลังดาวน์โหลดและใช้ VPN อย่างถูกต้องจะมีที่อยู่ IP และชื่อโฮสต์มากมายที่นี่ ดู iftop สำหรับการเชื่อมต่อ LAN ด้วย:
sudo iftop -i eth0
ที่นี่คุณจะเห็นปริมาณการใช้งานจำนวนมากไปยังที่อยู่ IP เดียวเป็นเซิร์ฟเวอร์ VPN และจากนั้นจะมีการรับส่งข้อมูลน้อยที่สุดไปยังอุปกรณ์ LAN อื่น ๆ โดยสมมติว่าคุณไม่ได้ใช้บริการอื่น ๆ ใน BeagleBone ของคุณ
คุณสามารถยืนยันได้ว่าเป็นคนที่ทำงาน VPN โดยทำตามคำแนะนำเหล่านี้
ไซต์นี้ให้คุณดาวน์โหลดทอร์เรนต์เพื่อดูที่อยู่ IP ที่เพื่อนอื่นใช้เพื่อเชื่อมต่อกับคุณ - หากทุกอย่างใช้งานได้จะเป็นที่อยู่ IP VPN ไม่ใช่ที่อยู่ IP ของคุณเอง
หากคุณประสบปัญหาคุณสามารถดูบันทึกข้อผิดพลาดพุ่งพรวดโดยทำ:
sudo tail -f /var/log/upstart/transmission-daemon.log
ในหน้าต่างเทอร์มินัล / SSH แยกต่างหากให้ลองเรียกใช้คำสั่ง tail ในขณะที่เริ่มการเชื่อมต่อ VPN ดังกล่าวข้างต้นแล้วมองหาข้อความแสดงข้อผิดพลาด หวังว่าคุณจะสามารถแก้ไขปัญหาจากการดูข้อความแสดงข้อผิดพลาดหากไม่มีการขุดบนอินเทอร์เน็ตหรือโพสต์ความคิดเห็น
กำหนดค่าทั้งหมดให้เริ่มต้นโดยอัตโนมัติ
หากคุณมีความสุขกับการออกคำสั่งด้วยตนเองเพื่อเริ่มอุโมงค์ OpenVPN หรือคุณต้องการที่จะทำมันด้วยสคริปต์ของคุณเองแล้วคุณจะทำ แต่ฉันต้องการให้มันเริ่มต้นการบู๊ตดังนั้นฉันจึงสร้างสคริปต์ Upstart ขึ้นมาใหม่เพื่อเปิดใช้งาน OpenVPN
sudo vim /etc/init/openvpn-transmission.conf
นี่คือสิ่งสุดท้ายที่เราต้องวาง!
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
ทั้งหมดนี้คือรอให้ระบบส่งสัญญาณว่าเครือข่ายพร้อมใช้งานจากนั้นจะเริ่มอุโมงค์ OpenVPN ซึ่งจะเป็นการเริ่มการส่งสัญญาณ เมื่อระบบถูกปิดหรือหากระบบเครือข่ายถูกปิดด้วยเหตุผลบางอย่าง Upstart จะลบกฎไฟร์วอลล์และปิด transmission-daemon ! ง่าย สิ่งนี้จะทำงานต่อไปหลังจากรีบูตด้วยดังนั้นตอนนี้คุณก็พร้อมแล้ว
หากต้องการโต้ตอบกับการส่งข้อมูลให้ใช้เว็บ GUI อย่างที่เราทำในระหว่างขั้นตอนการตั้งค่า นอกจากนี้ยังเป็นไปได้ที่จะทำให้ GUI สามารถเข้าถึงได้ผ่านอินเทอร์เน็ตโดยการตั้งค่าการส่งต่อพอร์ต มีบทเรียนมากมายเกี่ยวกับวิธีการทำเช่นนี้ดังนั้นฉันจะไม่ทำซ้ำที่นี่
สำหรับการดาวน์โหลดเสร็จสมบูรณ์จาก BeagleBone ฉันใช้ NFS ฉันสามารถรับความเร็วประมาณ 8 MB / s คัดลอกผ่าน LAN จาก BeagleBone ไปยังคอมพิวเตอร์เดสก์ท็อปของฉัน - ซึ่งค่อนข้างดีสำหรับอุปกรณ์ที่ใช้พลังงานต่ำ Ubuntu ให้ข้อมูลที่มีประโยชน์สำหรับการตั้งค่านี้