คุณจะตั้งค่าการส่งผ่านอินเทอร์เน็ต (reverse-tether) บน linux ได้อย่างไร


19

ฉันมี HTC Desire S ที่มีตัวเลือกในการเชื่อมต่อผ่าน usb และใช้การเชื่อมต่ออินเทอร์เน็ตของคอมพิวเตอร์ สิ่งนี้ทำงานได้ดีบน Windows แต่ฉันพยายามที่จะติดตั้งใน Ubuntu เมื่อฉันเสียบและเลือกการส่งผ่านอินเทอร์เน็ตจากเมนู usb อุปกรณ์ usb1 จะถูกสร้างขึ้นและฉันสามารถ ping เป็นที่อยู่ IP ได้ ฉันลองตั้งค่า iptables และตั้งค่า nat ต่าง ๆ แล้ว แต่ฉันไม่แน่ใจว่าฉันทำถูกหรือว่าต้องมีการตั้งค่าเพิ่มเติม ...

ขอบคุณสำหรับความช่วยเหลือ


ผมได้รับมันทำงานโดยใช้การรวมข้อมูลจากtrac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworkingและtranslate.googleusercontent.com/... ตอบด้านล่าง
bluegray

คำตอบ:


11

ข้อมูลต่อไปนี้ใช้งานได้ระยะหนึ่ง แต่ใช้ได้กับเบราว์เซอร์เท่านั้น

เมื่อคุณเสียบโทรศัพท์ของคุณผ่าน usb และเลือก Internet pass-through คุณควรได้อุปกรณ์ RNDIS ใหม่ (usb0 หรือ usb1) สำหรับ Ubuntu ให้แก้ไข / etc / network / interfaces และเพิ่มบรรทัดต่อไปนี้:

iface usb0 inet dhcp
iface usb1 inet dhcp

สิ่งนี้จะกำหนด IP โดยอัตโนมัติเมื่อมีการเพิ่มอุปกรณ์ หากที่อยู่เครือข่ายไม่ได้รับมอบหมายให้ usb0 หรือ usb1 โดยอัตโนมัติคุณต้องทำด้วยตนเอง

จากนั้นคุณต้องตั้งค่า NAT บนคอมพิวเตอร์ linux ของคุณ สิ่งที่ต้องการ:

sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo echo 1 > /proc/sys/net/ipv4/ip_forward 

คุณต้องมีเซิร์ฟเวอร์ DNS:

sudo apt-get install bind9

ใช้งานได้ไม่กี่นาที แต่หลังจากนั้นไม่นานโทรศัพท์ก็เลิกค้นหา HTC Sync และยกเลิกการเชื่อมต่อ

สำหรับโทรศัพท์ที่รูต

คุณสามารถเชื่อมต่ออย่างถาวรหากคุณมีโทรศัพท์รูท (fre3vo ใช้งานได้สำหรับฉัน) ดำเนินการดังต่อไปนี้ด้วย adb

เปิดใช้งานโหมด usb สำหรับเครือข่ายและ adb:

adb shell echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch

กำหนด IP ให้กับอุปกรณ์ usb0 บนโทรศัพท์:

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

เพิ่มเส้นทางเริ่มต้น IP ควรเป็น IP ที่กำหนดให้ usb0 ใน linux:

adb shell route add default gw 192.168.99.1 dev usb0

ตั้งค่าเซิร์ฟเวอร์ DNS นี่คือเซิร์ฟเวอร์ DNS แบบเปิดของ Google แต่สามารถเป็น IP ของคอมพิวเตอร์ linux ของคุณหากคุณมีเซิร์ฟเวอร์ DNS:

adb shell setprop net.dns1 8.8.8.8

2
ตามตำนานคุณสามารถปลอม HTC sync โดยทำสิ่งต่อไปนี้: บนโทรศัพท์ HTC เมื่อคุณเสียบ usb และเลือกอินเทอร์เน็ตผ่านมันรอการซิงค์ของ HTC และยอมแพ้ กำลังฟังพอร์ต 6000 ดังนั้นคุณต้องปลอม HTC sync กับ netcat เท่านั้น ลองทำสิ่งนี้ที่บรรทัดคำสั่ง: phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null ค่าเลข ฐานสิบของ00 02 00 00คือทั้งหมดที่มันต้องการ
geffchang

@geffchang ขอขอบคุณ! สำหรับผู้ใช้ windows เมื่อมือถือพยายามเชื่อมต่อผ่าน USB คุณสามารถเรียกใช้netsh interface ip show configเพื่อดูชื่ออินเทอร์เฟซทั้งหมดและจากนั้นnetsh interface ip show config name="Local Area Connection #2"จะได้รับเพียงอินเทอร์เฟซนั้นซึ่งLocal Area Connection #2เป็นสิ่งที่เรียกอะแดปเตอร์ใหม่ คุณสามารถเปลี่ยนชื่อได้เพื่อความสะดวก
Sam Hasler

3

ทำทุบตีเล็ก ๆ นี้เพื่อให้ทุกอัตโนมัติ เพียงเสียบโทรศัพท์ของคุณในโหมดการชาร์จกับคอมพิวเตอร์ของคุณและรัน bash นี้

#!/bin/bash
/opt/android-sdk-update-manager/platform-tools/adb shell 'echo 6 > /sys/devices/platform/msm_hsusb/usb_function_switch'
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up
sleep 1
/opt/android-sdk-update-manager/platform-tools/adb shell setprop net.dns1 8.8.8.8

get_ip ()
{
ifconfig usb0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .
}

echo "waiting for IP on computer usb0"
while [[ `get_ip` < 192 ]];do sleep 2; done
ip=`get_ip`
echo "IP adress is $ip "
/opt/android-sdk-update-manager/platform-tools/adb shell route add default gw $ip dev usb0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

0

เพราะผมไม่ได้มีการเข้าถึงเครื่อง Linux ตัวเองฉันไม่สามารถทดสอบการแก้ปัญหานี้ แต่คุณสามารถลองขั้นตอนที่อธิบายไว้ที่นี่ (Google แปลจากภาษารัสเซีย)

ความเห็นต่อการแปล:

  • "rutovanym" หมายถึงการรูท
  • WB หรือ BB หมายถึง Big Brother (เดสก์ท็อป);
  • smarta ย่อมาจาก "smartphone's"

โชคดี!


ขอบคุณ แต่มีวิธีที่ง่ายกว่าการเชื่อมต่ออินเตอร์เฟส
bluegray

0

ตกลงนี่คือสิ่งที่ฉันทำไม่มีการรูทเครื่อง HTC ที่ต้องการ:

ตั้งค่า bind9 และ NAT ฯลฯ ...

หมายเหตุ: 1: ถ้าคุณทำ sudo echo 1> / proc / sys / net / ipv4 / ip_forward คุณจะได้รับข้อผิดพลาดการอนุญาตดังนั้นนี่คือสคริปต์สำหรับกระบวนการ 2: คุณสามารถทำให้ iptables เฉพาะเจาะจงมากขึ้นเกี่ยวกับวิธีการทำงานของมันโดย การเพิ่มพารามิเตอร์สำหรับอุปกรณ์เฉพาะ


cd ~
echo '!/bin/bash
apt-get install bind9
iptables -A POSTROUTING -t nat -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward' > setup_bind9_nat.sh

chmod +x setup_bind9_nat.sh
sudo ./setup_bind9_nat.sh

ตอนนี้เสียบโทรศัพท์ของคุณและเลือก 'อินเทอร์เน็ตผ่าน'

รอให้อุปกรณ์ปรากฏใน: ifconfig ตรวจสอบด้วย arp

ฉันพบว่าฉันต้องถอดปลั๊กอุปกรณ์จากนั้นเสียบใหม่อีกครั้งเพื่อให้ปรากฏใน arp สิ่งต่าง ๆ ทำงานไม่ถูกต้องหาก arp ไม่แสดงอุปกรณ์

อุปกรณ์จะรอให้ HTC Sync ส่งข้อความดังนั้นคุณต้องจำลองข้อความ HTC Syncs:


#change this line to be more specific if you have more than one usb network device
phone_usb_device="usb"
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print $1}'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer usb"
while [[ `get_ip` < 192 ]];do sleep 2; done
phoneip=`get_ip`
echo "IP adress is $phoneip "

echo -n -e "\x00\x02\x00\x00" | nc -q 2 $phoneip 6000 > /dev/null

ฉันอาจเขียนรุ่นนี้โดยใช้ D-Bus ดังนั้นส่วนหลังจะดำเนินการโดยอัตโนมัติเมื่อเสียบอุปกรณ์ ฯลฯ

ตกลงนี่คืองานของฉันอยู่ระหว่างดำเนินการฉันไม่พบอะไร 'ทั่วไป' บน d-bus ดังนั้นฉันจึงเลือกใช้แฮ็คโซลูชันโดยใช้ udev .. มันไม่สมบูรณ์แบบเช่นคำสั่งจะทำงานสองครั้งดังนั้นฉันจึง ฉันจะต้องดูว่าฉันสามารถกรองพารามิเตอร์การจับคู่ได้ดีขึ้นหรือไม่นอกจากนี้ยังเพิ่มการหมดเวลาในสคริปต์สุดท้ายเพียงแค่ใส่กล่องและดูว่าฉันสามารถแทนที่ arp ด้วยบางสิ่งที่ดีกว่าได้ไหมพูดใน / proc

here.s ไฟล์. rules ของฉันจาก /etc/udev/rules.d ฉันสร้างขึ้น


cat /etc/udev/rules.d/htc-desire.rules

คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณชอบ แต่ไม่ควรเริ่มด้วยตัวเลขในแบบที่มันจะวิ่งไปเรื่อย ๆ

เพิ่มรายการต่อไปนี้ในไฟล์เป็น sudo โดยใช้เครื่องมือแก้ไขที่คุณเลือก ฯลฯ


#KERNEL=="usb?" or DRIVERS=="usb" not sure which is best, may need extra mode information too from usb device.
SUBSYSTEM=="net", DRIVERS=="usb", ATTRS{manufacturer}=="HTC", ATTRS{idProduct}=="0ffe", RUN+="/home/olli/chain_mock_htc_sync.sh $kernel"


Ubuntu is setup to create the file with the correct permissions already 


ls -lrt /etc/udev/rules.d/htc-desire.rules 
-rw-r--r-- 1 root root 248 Jun 26 22:09 htc-desire.rules

โดยทั่วไปถ้าคุณไม่เห็นของ 3


sudo chmod a+r /etc/udev/rules.d/htc-desire.rules 

จากนั้นคุณจะต้องมีไฟล์เพิ่มเติมสองไฟล์ไฟล์หนึ่งเชื่อมโยงกันเนื่องจาก RUN จาก udev จะบล็อกทุกอย่าง (แม้ว่าไฟล์จะรันล่าสุด !!) ... อืม ... ยังไงก็ตาม:

ฉันสร้างไฟล์ในโฮมไดเร็กตอรี่ของคุณสำหรับตอนนี้ "/ home / olli /" ... ดังนั้นอย่าลืมเปลี่ยนบิต '/ home / olli /' ด้วยทุกที่ที่คุณสร้างไฟล์:

ดังนั้นสำหรับฉันซีดีไปยังไดเรกทอรีบ้านของฉัน


cd ~

สร้างไฟล์ที่เรียกว่า


chain_mock_htc_sync.sh

มีดังต่อไปนี้:



#!/bin/bash
/home/olli/mock_htc_sync.sh "$1" &
exit

ทำให้ปฏิบัติการได้


chmod +x chain_mock_htc_sync.sh

สร้างไฟล์ใหม่ที่เรียกว่า


mock_htc_sync.sh

ต่อไปนี้


#!/bin/bash
#change this line to be more specific if you have more than one usb network device

phone_usb_device="$1"
get_ip ()
{
    arp -n | grep $phone_usb_device | awk '{print $1}'
}

#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer $phone_usb_device"
while [[ `get_ip`  /dev/null

ทำให้ปฏิบัติการได้:

chmod +x mock_htc_sync.sh

หวังว่าฉันควรจะมีเวอร์ชั่นที่ดีขึ้นเร็ว ๆ นี้ในฐานะที่เป็น POS (อาจเป็นวันพรุ่งนี้)


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