# USB Internet Sharing
USB internet sharing allows one computer to provide internet access to another computer through a USB connection. This is useful when Wi-Fi isn't available, ethernet cables aren't practical, or you need a direct connection between two machines.
## Pre-Setup Checklist
✅ Host computer has active internet connection
✅ Both computers have USB ports (USB 2.0 or higher)
✅ USB cable supports data transfer (not just power/charging)
✅ Administrator/root access on both computers
✅ USB-to-Ethernet adapters (for most computer-to-computer setups)
## Method 1: USB Tethering (Phone to Computer)
This is the simplest method when sharing from a smartphone.
### On Android
1. Connect phone to computer via USB
2. Open **Settings** > **Network & Internet** > **Hotspot & Tethering**
3. Enable **USB Tethering**
4. Computer should automatically detect and connect
### On iPhone
1. Connect iPhone to computer via USB
2. Open **Settings** > **Personal Hotspot**
3. Enable **Allow Others to Join**
4. Computer should recognize iPhone as network interface
**Note:** May require carrier plan that supports tethering. Some carriers charge extra for this feature.
## Method 2: USB-to-Ethernet Adapter Bridge
Most reliable method for computer-to-computer internet sharing.
### Equipment Needed
- Two USB-to-Ethernet adapters
- Ethernet cable
- Or: Single USB-to-Ethernet adapter + USB networking cable
### Setup on Mac (Host Computer)
1. **Connect USB-to-Ethernet adapter** to Mac with internet
2. Connect ethernet cable to client computer's USB-to-Ethernet adapter
3. **Open System Settings** > **Sharing**
4. Select **Internet Sharing** from left sidebar
5. **Share your connection from:** [Your active internet source - Wi-Fi, Ethernet, etc.]
6. **To computers using:** Check the USB Ethernet adapter
7. Click checkbox to enable Internet Sharing
8. Confirm when prompted
### Setup on Windows (Host Computer)
1. **Connect USB-to-Ethernet adapter**
2. Open **Control Panel** > **Network and Internet** > **Network and Sharing Center**
3. Click your active internet connection
4. Click **Properties**
5. Go to **Sharing** tab
6. Check **"Allow other network users to connect through this computer's Internet connection"**
7. Select the USB Ethernet adapter from dropdown
8. Click **OK**
### Setup on Linux (Host Computer)
**Using NetworkManager (GUI):**
1. Open **Network Settings**
2. Select your internet connection
3. Go to **IPv4 Settings** tab
4. Change **Method** to **Shared to other computers**
5. Save and reconnect
**Using command line:**
```bash
# Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
# Find your interface names
ip addr show
# Set up NAT (replace with your actual interface names)
sudo iptables -t nat -A POSTROUTING -o [internet-interface] -j MASQUERADE
sudo iptables -A FORWARD -i [usb-interface] -o [internet-interface] -j ACCEPT
sudo iptables -A FORWARD -i [internet-interface] -o [usb-interface] -m state --state RELATED,ESTABLISHED -j ACCEPT
# Make persistent across reboots
sudo apt install iptables-persistent # On Debian/Ubuntu
sudo iptables-save | sudo tee /etc/iptables/rules.v4
```
### Client Computer Configuration
**Most systems will auto-configure via DHCP.** If not:
**Mac/Linux:**
```bash
# Check if interface received IP
ip addr show
# or
ifconfig
# If needed, request DHCP
sudo dhclient [interface-name] # Linux
# Mac usually auto-configures
```
**Windows:**
1. **Control Panel** > **Network and Internet** > **Network Connections**
2. Right-click USB Ethernet adapter > **Properties**
3. Select **Internet Protocol Version 4 (TCP/IPv4)** > **Properties**
4. Select **Obtain an IP address automatically**
5. Select **Obtain DNS server address automatically**
6. Click **OK**
## Method 3: Direct USB Networking (Advanced)
Some systems support direct USB-to-USB networking without adapters.
### Linux-to-Linux (USB Gadget Mode)
**On client computer (will receive internet):**
```bash
# Load USB networking modules
sudo modprobe g_ether
# Configure interface
sudo ip addr add 192.168.7.2/24 dev usb0
sudo ip link set usb0 up
sudo ip route add default via 192.168.7.1
```
**On host computer (provides internet):**
```bash
# Configure USB network interface
sudo ip addr add 192.168.7.1/24 dev usb0
sudo ip link set usb0 up
# Enable forwarding and NAT
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o [internet-interface] -j MASQUERADE
sudo iptables -A FORWARD -i usb0 -o [internet-interface] -j ACCEPT
```
**Limitations:**
- Requires specific USB controller support
- Not all computers support USB gadget mode
- More complex than adapter method
## Troubleshooting
### Connection Not Detected
**Check cable:**
- Ensure cable supports data transfer (not just charging)
- Try different USB port
- Test cable with file transfer to verify it works
**Check drivers:**
- **Windows:** Device Manager should show network adapter without errors
- **Mac:** System Information > USB should list device
- **Linux:** Run `lsusb` and `dmesg | tail` to check for errors
### No Internet on Client Computer
**Verify host sharing is enabled:**
- Check that Internet Sharing/ICS is active on host
- Temporarily disable firewall on host to test
**Check client IP configuration:**
```bash
# Should show IP in range like 192.168.x.x or 10.x.x.x
ip addr show # Linux/Mac
ipconfig # Windows
```
**Test connectivity:**
```bash
# Ping the gateway (host computer)
ping 192.168.2.1 # Common gateway IP
# Test DNS resolution
ping google.com
```
**If ping to gateway works but internet doesn't:**
- DNS issue - manually set DNS servers:
- Google DNS: 8.8.8.8, 8.8.4.4
- Cloudflare DNS: 1.1.1.1, 1.0.0.1
### Slow Connection Speeds
**USB 2.0 vs 3.0:**
- USB 2.0: ~480 Mbps theoretical (real-world: 200-300 Mbps)
- USB 3.0: ~5 Gbps theoretical (real-world: 2-3 Gbps)
- Ensure using USB 3.0 ports and cables if speed is critical
**Check adapter quality:**
- Cheap USB-to-Ethernet adapters may bottleneck speeds
- Look for gigabit-rated adapters for best performance
**Reduce network congestion:**
- Close bandwidth-heavy applications on host
- Limit simultaneous connections on client
## When to Use USB Internet Sharing
**Good use cases:**
- Emergency internet access when Wi-Fi unavailable
- Secure connection between two computers
- Testing network applications
- Sharing mobile data from phone to laptop
- Temporary solution in field/remote locations
**Better alternatives when available:**
- **Wi-Fi hotspot:** Easier setup, supports multiple devices
- **Ethernet cable:** Direct connection, faster speeds
- **Bridge mode router:** More robust for permanent setups
## Security Considerations
- USB connections are more secure than wireless (physical access required)
- Host computer firewall still applies to shared connection
- Client traffic routes through host - host can potentially monitor traffic
- For sensitive work, use VPN on client computer for additional encryption
## Related Topics
- [[Network Interfaces]] - Understanding network interface types
- [[IP Address]] - How IP addressing works
- [[DHCP Protocol]] - Automatic IP configuration
- [[NAT (Network Address Translation)]] - How internet sharing works technically
![[USB Internet Sharing .excalidraw.svg]]