ส่ง daemon ผ่าน OpenVPN


20

ฉันเพิ่งได้รับ BeagleBone Black ซึ่งฉันได้ติดตั้ง Ubuntu ด้วยวิธีนี้ มันใช้งานได้แล้วทั้งหมด ฉันต้องการใช้ BeagleBone ของฉันเป็นกล่องฝนตกหนัก แต่ฉันไม่ต้องการทำโดยตรงผ่านการเชื่อมต่ออินเทอร์เน็ตของฉัน (ฉันไม่คิดว่า ISP ของฉันจะชอบมัน) - ดังนั้นฉันจึงซื้อการสมัคร VPN จากเซิร์ฟเวอร์ยุโรป . ฉันเชื่อมต่อแล็ปท็อปของฉันเข้ากับ VPN นี้ด้วยตนเองก่อนและเรียกใช้การส่งผ่าน ฉันรู้ว่าการเชื่อมต่อ VPN ทำงานใน Ubuntu และโฮสต์ให้ข้อมูลการตั้งค่าสำหรับ OpenVPN น่ารำคาญลักษณะไดนามิกของที่อยู่ IP ที่กำหนดหมายความว่ามันจะเปลี่ยนบ่อยดังนั้นเมื่อฉันใช้แล็ปท็อปของฉันกับ VPN ฉันจะตั้งค่าการรับฟังด้วยตนเองในการส่งเป็นค่าที่ต้องการ

เป็นการดีที่ฉันต้องการตั้งค่าต่อไปนี้:

  • การส่งข้อมูลจะดำเนินการผ่าน VPN เท่านั้นและห้ามมิให้ใช้ torrents ผ่านการเชื่อมต่อ WAN ปกติ
  • เฉพาะทราฟฟิกที่ส่งไปยัง Transmission เท่านั้นที่จะรับหรือส่งผ่าน VPN ทราฟฟิกที่ไม่ได้ร้องขออื่น ๆ จะถูกทิ้ง
  • การส่งใช้พอร์ตที่เหมาะสมในการฟังโดยอ้างอิงจากที่อยู่ IP ที่กำหนด
  • OpenVPN เริ่มโดยอัตโนมัติเมื่อบูตจากนั้นเริ่มส่งในภายหลัง
  • เว็บ GUI ของการส่งข้อมูลสามารถเข้าถึงได้ผ่าน LAN และอาจผ่านอินเทอร์เน็ตจากการเชื่อมต่อ WAN ของฉัน (เช่นไม่ย้อนกลับผ่าน VPN)

3
คำตอบตัวเองไม่เลว อย่าขอโทษสำหรับพวกเขา คุณไม่ต้องอธิบายนั่นคือสิ่งที่คุณกำลังทำ ... มันเป็นพฤติกรรมที่ได้รับการสนับสนุน
RobotHumans

เห็นด้วยกับ @hbdgaf ไม่จำเป็นต้องขอโทษ ผลงานยอดเยี่ยมในทุกด้าน
JakeGould

คำตอบ:


23

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


ว้าว! คุณใช้เวลาค้นหาสิ่งนี้ทั้งหมดนานแค่ไหน?
Ismael Miguel

ฮ่าฮ่าซักพักนึง ฉันเคยทำมันมาก่อนบนเราเตอร์ DD-WRT จากนั้นเมื่อฉันทำฉันอีกครั้งสำหรับ BeagleBone ฉันคิดว่าฉันจะเขียนมันขึ้นมาดังนั้นฉันจึงไม่ลืมที่จะทำมัน : D
seanlano

1
คุณควรอ่านสิ่งนี้: unix.stackexchange.com/questions/88693/… (มันเป็นคำตอบที่ดีมาก) สิ่งนี้จะช่วยคุณได้ฉันแน่ใจแล้ว
Ismael Miguel

3
ฉันเพิ่งรู้หลังจากการตั้งค่า DNS ของ server กับการใช้ OpenDNS และมองผ่านสถิติที่นี้การตั้งค่า DNS รั่วไหลผ่านการเชื่อมต่อ ฉันจะตรวจสอบเพิ่มเติมเพื่อดูว่าฉันสามารถแก้ไขได้ไหม ฉันจะยังคงทำงานต่อไปเนื่องจากการเชื่อมต่อนั้นผ่าน VPN - แต่ก็ไม่เหมาะ
seanlano

1
@ seanlano ขอขอบคุณที่แจ้งให้เราทราบ แจ้งให้เราทราบหากคุณพบการแก้ไข
Winterflags

7

เพิ่งได้รับการทำงานโดยใช้SystemDดังนั้นฉันคิดว่าฉันจะแบ่งปัน ฉันได้วางสคริปต์การกำหนดค่าและใบรับรองทั้งหมดไว้ในไดเรกทอรีเดียวกันซึ่งฉันจะอ้างถึง/etc/openvpn/myprovider

กำหนดค่า OpenVPN

ขึ้นอยู่กับ VPN เฉพาะของคุณ แต่สิ่งหนึ่งที่แตกต่างจากการกำหนดค่าของ @ seanlano คือฉันใช้route-upสคริปต์เท่านั้น ดังนั้นสิ่งที่คุณต้องการนอกเหนือจากการกำหนดค่าการทำงานของคุณคือสายเหล่านี้:

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

ที่ที่คุณวางtransmission-route-up.shสคริปต์ได้ทุกที่ที่คุณต้องการ สังเกตการขาดdownสคริปต์ (VPN ของฉันใช้สคริปต์แบบกำหนดเองอยู่แล้วดังนั้นมันจึงมีข้อขัดแย้งกันอยู่แล้ว)

/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

บรรทัดแรกprintenvคือความสำคัญ วางไว้ทุกที่ที่คุณต้องการมันถูกใช้ในบริการ SystemD ในภายหลัง ฉันวางไว้ในไดเรกทอรีเดียวกันกับการกำหนดค่า VPN ของฉัน

แทนที่ 24328ด้วยพอร์ตอะไรก็ได้ที่ transmission-daemon ของคุณควรฟัง ฉันใช้ iptables (โดยใช้ Debian) ดังนั้นคุณสามารถแทนที่บรรทัดเหล่านั้นด้วยบรรทัด ufw จากการกำหนดค่าของ @ seanlano

บริการ SystemD VPN

นี่คือบริการอัตโนมัติที่เริ่มต้น VPN สำหรับเรา ตรวจสอบว่าเส้นทางไปยัง openvpn นั้นถูกต้องบนเครื่องของคุณและเส้นทางไปยังไฟล์กำหนดค่านั้นถูกต้องเช่นกัน คุณต้องระบุพา ธเต็มในเซอร์วิส 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

เปิดใช้งานบริการ VPN ด้วย:

systemctl enable my-vpn.service

และทดสอบด้วย:

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

ถ้ามันเริ่มต้น / วิ่งแสดงว่าคุณทำได้ดี

SystemD transmission-daemon.service

สคริปต์นี้ต้องการบริการ vpn-service ดังนั้นหาก vpn หยุดทำงาน transmission-daemon ก็จะหยุดทำงานเช่นกัน สิ่งนี้มีประโยชน์หาก vpn เริ่มต้นใหม่และคุณได้รับที่อยู่ IP ใหม่เนื่องจากการส่งข้อมูลจะต้องเริ่มต้นใหม่และผูกใหม่ซึ่งควรจัดการโดยอัตโนมัติ โปรดทราบว่าเราใช้ประโยชน์จากตัวแปรสภาพแวดล้อมที่เราพิมพ์ในroute-upสคริปต์ก่อนหน้านี้

/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

เปิดใช้งาน

systemctl enable transmission-daemon.service

และเริ่มมัน

systemctl start transmission-daemon.service

เมื่อคุณรีบูทเครื่องควรเริ่มต้นโดยอัตโนมัติ (ตามลำดับ!) โปรดทราบว่าการใช้Type=simpleบริการ vpn ทำให้เกิดปัญหากับช่วงเวลาของการสั่งสคริปต์ดังนั้นฉันแนะนำให้ใช้forkingแทน

คุณสามารถระบุที่อยู่ IP จริงสำหรับrpc-bind-addressถ้าคุณต้องการ จำกัด มากขึ้น (นี่คือที่อยู่ฟังเว็บ GUI ซึ่งไม่ควรเป็น VPN-ip ของคุณ) และถ้าคุณต้องการเรียกใช้การส่งด้วยดีเพียงแค่เปลี่ยนExecStartสายและเพิ่ม/usr/bin/nice -n15ไปยังจุดเริ่มต้น

การจัดการการเปลี่ยนแปลงที่อยู่

สิ่งหนึ่งที่ฉันสังเกตเห็นเมื่อเวลาผ่านไปคือถ้าการเชื่อมต่อ VPN ด้วยเหตุผลบางอย่างได้รับที่อยู่ IP ใหม่การส่งจะยังคงถูกผูกไว้กับที่อยู่เดิมและหยุดทำงาน และการทำแบบง่ายๆsystemctl restart transmission-daemon.serviceนั้นไม่ได้ลดทอนลง มันจำเป็นต้องหยุดอย่างเต็มที่แล้วเริ่มต้นใหม่

ไม่มีความคิดว่าทำไม แต่ด้วยเหตุผลนั้นฉันได้เพิ่มบรรทัดต่อไปนี้ในroot 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

ไม่เป็นที่สนใจสิ่งนี้จะทำงานใน BeagleBone หรือไม่ ถ้าเป็นเช่นนั้นคุณเห็นปัญหาเรื่องประสิทธิภาพของการส่งหรือไม่ นอกจากนี้การเขียนที่ยอดเยี่ยม :)
seanlano

อ่า มันทำงานบนเครื่องเดสก์ท็อปปกติของฉันและฉันสังเกตว่าไม่มีปัญหา
Jonas Kalderstam

ยุติธรรมพอสมควร ทำงานได้ดีสำหรับฉันบนเครื่อง Intel ฉันหวังว่าฉันจะทำกล่อง torrent ราคาถูกพร้อมโปรเซสเซอร์ ARM - แต่เห็นได้ชัดว่าไม่ควรทำ
seanlano

ตรวจสอบ rtorrent มันเป็นนักแสดงที่มีประสิทธิภาพมาก
Jonas Kalderstam

ขอบคุณฉันจะ สิ่งอื่น ๆ ทำงานได้ดีบนกล่อง ARM ดังนั้นบางที rtorrent อาจทำงานได้อย่างถูกต้อง
seanlano

3

ฉันสังเกตเห็นว่าคุณกล่าวว่าการส่งไม่ผ่าน VPN สำหรับ UPnP / NAT-PMP ฉันสังเกตเห็นสิ่งนี้เช่นกันและสร้างแพตช์สำหรับการส่งดังนั้นจึงให้เกียรติการตั้งค่า bind-address-ipv4 สำหรับ UPnP NAT-PMP นั้นใช้งานได้ยากขึ้นเล็กน้อยเนื่องจากคุณต้องกำหนดเกตเวย์เริ่มต้น ถึงแม้ว่า UPnP จะเป็นตัวหลักที่ใช้กันอยู่ในปัจจุบันดังนั้นมันอาจจะดีพอ ฉันเข้าสู่ระบบนี้เป็นข้อผิดพลาดในเว็บไซต์ trac.transmissionbt และให้โปรแกรมแก้ไข หวังว่ามันจะรวมอยู่ในการเปิดตัวในอนาคต https://trac.transmissionbt.com/ticket/5990

ตัวเลือกอื่นสำหรับตอนนี้ถ้าคุณไม่ต้องการคอมไพล์ใหม่คือการเรียกใช้ upnpc จากแพ็คเกจ miniupnpc ด้วยตนเอง เช่น

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

ที่ 10.10.10.51 เป็น VPN IP ของคุณและ 51515 เป็นพอร์ต TCP / UDP ที่คุณร้องขอ

ฉันไม่แน่ใจว่าการส่งต่อนั้นดีแค่ไหน นอกจากนี้คุณอาจต้องการใช้ตัวเลือก '-d' เพื่อลบพอร์ตของคุณเมื่อยกเลิกการเชื่อมต่อ ฉันพบว่าถ้าฉันทำไม่ได้ฉันจะไม่ได้รับพอร์ตเดิมอีกถ้าฉันเชื่อมต่อกับ VPN อีกครั้ง

ไชโย


ฉันใช้เวลาหลายปีที่พยายามหาวิธีแก้ปัญหาเช่นนี้ฉันหวังว่าจะเจอminiupnpc! และหวังว่าแพทช์จะถูกผสานและปัญหานี้จะได้รับการแก้ไขตลอดไป ในระหว่างนี้ฉันจะพยายามใช้เคล็ดลับที่มีประโยชน์ของคุณอย่างแน่นอน
seanlano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.