หมายเหตุ: (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 ให้ข้อมูลที่มีประโยชน์สำหรับการตั้งค่านี้