리눅스에서 인터넷 패스 스루 (역방향)를 어떻게 설정합니까?


19

USB를 통해 연결하고 컴퓨터의 인터넷 연결을 사용할 수있는 옵션이있는 HTC Desire S가 있습니다. 이것은 Windows에서 잘 작동하지만 우분투에서 설정하는 데 어려움을 겪고 있습니다. USB 메뉴를 연결하고 인터넷 통과를 선택하면 usb1 장치가 만들어지고 IP 주소를 핑 (ping) 할 수 있습니다. 다양한 iptables 구성을 시도하고 nat를 설정했지만 올바르게 수행하는지 또는 추가 구성이 필요한지 확실하지 않습니다 ...

도움을 주셔서 감사합니다.


trac.osuosl.org/trac/replicant/wiki/ReplicantUSBNetworkingtranslate.googleusercontent.com/… 의 정보 조합을 ​​사용하여 작업했습니다 . 아래 답변하십시오.
bluegray

답변:


11

다음은 잠시 동안 만 작동하지만 브라우저에서만 작동합니다.

USB를 통해 휴대폰을 연결하고 인터넷 통과를 선택하면 새로운 RNDIS 장치 (usb0 또는 usb1)가 제공됩니다. 우분투의 경우 / etc / network / interfaces를 편집하고 다음 줄을 추가하십시오.

iface usb0 inet dhcp
iface usb1 inet dhcp

장치가 추가되면 IP가 자동으로 할당됩니다. 네트워크 주소가 usb0 또는 usb1에 자동으로 할당되지 않은 경우 수동으로 수행해야합니다.

그런 다음 Linux 컴퓨터에서 NAT를 설정해야합니다. 다음과 같은 것 :

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

DNS 서버도 필요합니다 :

sudo apt-get install bind9

몇 분 동안 작동하지만 잠시 후 전화기에서 HTC 동기화 찾기를 포기하고 연결을 끊습니다.

루팅 된 전화

루팅 된 전화가있는 경우 영구적으로 연결할 수 있습니다 (fre3vo가 저에게 효과적 임). adb로 다음을 실행하십시오.

네트워크 및 adb에 USB 모드를 활성화하십시오.

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

전화기의 usb0 장치에 IP를 할당하십시오.

adb shell ifconfig usb0 192.168.99.5 netmask 255.255.255.0 up

기본 경로를 추가하십시오. IP는 리눅스에서 usb0에 할당 된 IP 여야합니다 :

adb shell route add default gw 192.168.99.1 dev usb0

DNS 서버를 설정하십시오. 이것은 Google의 개방형 DNS 서버이지만 DNS 서버가있는 경우 Linux 컴퓨터의 IP가 될 수 있습니다.

adb shell setprop net.dns1 8.8.8.8

2
범례에 따르면 다음을 수행하여 HTC 동기화를 가짜로 만들 수 있습니다. HTC 전화에서 USB를 연결하고 인터넷 패스 스루를 선택하면 HTC 동기화를 기다렸다가 포기합니다. 포트 6000에서 수신 대기 중입니다. 따라서 netcat과의 HTC 동기화 만 가짜로하면됩니다. 커맨드 라인에서 이것을보십시오 : phoneip=$(arp -n | grep usb | awk '{print $1}') echo -n -e "\x00\x02\x00\x00" | nc $phoneip 6000 > /dev/null 16 진수 값 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

A는이 작은 배쉬를 모두 자동화했습니다. 휴대 전화를 충전 모드로 컴퓨터에 연결하고이 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는 빅 브라더 (데스크톱)를 의미합니다.
  • smarta는 "스마트 폰"의 약자입니다.

행운을 빕니다!


고맙지 만 인터페이스를 브리징하는 것보다 쉬운 방법이 있습니다.
bluegray

0

좋아, 여기에 내가 한 일이 있으며, HTC의 뿌리는 원하지 않습니다.

bind9 및 NAT 설정 ...

참고 : 1 : sudo echo 1> / proc / sys / net / ipv4 / ip_forward 만하면 권한 오류가 발생하므로 프로세스 스크립트는 다음과 같습니다. 특정 장치에 대한 매개 변수 추가


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 동기화에 메시지를 보내기 위해 대기하므로 HTC 동기화 메시지를 조롱해야합니다.


#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 내가 만든 /etc/udev/rules.d의 .rules 파일


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'r이 보이지 않으면


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

udev에서 RUN하면 (마지막으로 실행 되더라도) 다른 모든 것을 차단하기 때문에 두 개의 추가 파일이 필요합니다. 어쨌든 :

지금은 "/ home / olli /"홈 디렉토리에 파일을 만들었으므로 파일을 만들 때마다 '/ home / olli /'비트를 바꾸십시오.

나를 위해, 내 홈 디렉토리에 cd.


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로 곧 멋진 정리 된 버전을 가져야한다. (아마 내일).


0

루팅하지 않고 Android 및 Linux를 사용하는 USB 역 테 더링의 경우 내 대답을 참조 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.