Difference between revisions of "Sharing PPP Connection"

From ArchWiki
Jump to: navigation, search
m (Network Bridge: ifconfig -> ip. i really hope this works)
m (See Also)
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
[[Category:Networking]]
 
[[Category:Networking]]
== Sharing via wired ethernet ==
 
=== Requirements ===
 
The following programs must have been installed in order to share the ppp connection:
 
# Programs for configuring generic network interface card (package '''net-tools''')
 
# The '''iptables''' program which is used to manipulate how data is passed through your machine from your clients and back (package '''iptables''')
 
# '''dnsmasq''' software for acting as a DHCP and DNS caching server (package '''dnsmasq''')
 
# If you want to share the ppp connection with more computers you need to setup a network bridge. (package '''bridge-utils''')
 
  
The following conditions must also have been met:
+
== Requirements ==
# You must have a working ppp connection  
+
Before proceeding, you must make sure:
# You must have a working an extra eth interface card (in terms of "can be used in Linux")
+
# You must have a working PPP connection.
 +
# You must have an extra Ethernet interface card in your computer with which to share your connection.
  
=== Instructions ===
+
== Installing ==
<ol>
+
The following packages must be [[Pacman|installed]] from the [[official repositories]] for both Wired and Wireless sharing:
<li>Set the ppp connection up.</li>
+
* {{Pkg|iptables}}: for controlling packets in your network.
you can assign an ip address to the interface as usual, by running (again, as root): <pre>ifconfig eth1 192.168.0.254</pre>
+
* {{Pkg|dnsmasq}}: for acting as a DHCP and DNS caching server.
<li>Set the kernel to router mode. This is done by running as root: <pre>echo 1 > /proc/sys/net/ipv4/ip_forward</pre></li>
+
* {{Pkg|bridge-utils}}: for setting up a network bridge.
<li>Configure '''dnsmasqd'''. Make the following changes to /etc/dnsmasq.conf (uncomment if necessary): <pre>
+
 
 +
Depending on whether you want to share a wireless or wired connection, you also have to install:
 +
* '''wired''': {{Pkg|iproute2}} or {{Pkg|net-tools}} (this article uses {{ic|iproute2}} since {{ic|net-tools}} is deprecated).
 +
* '''wireless''': {{Pkg|iw}} or {{Pkg|wireless_tools}} (this article uses {{ic|iw}} since {{ic|wireless_tools}} is deprecated).
 +
 
 +
== Sharing via Wired Ethernet ==
 +
 
 +
* Set the PPP connection up.
 +
: You can assign an IP address to the interface as usual, by running (as root):
 +
# ip addr add 192.168.0.254 dev eth0
 +
* Set the kernel to router mode. This is done by running:
 +
# echo 1 > /proc/sys/net/ipv4/ip_forward
 +
* Configure {{ic|dnsmasqd}}. Make the following changes to {{ic|/etc/dnsmasq.conf}} (uncomment if necessary):
 +
{{hc|/etc/dnsmasq.conf|<nowiki>
 
domain-needed
 
domain-needed
 
bogus-priv
 
bogus-priv
interface=eth1 (or whatever interface your wlan is)
+
interface=eth0 # change to your chosen interface
dhcp-range=192.168.0.1,192.168.0.100,12h
+
dhcp-range=192.168.0.1,192.168.0.100,12h</nowiki>
</pre></li>
+
}}
<li>Start the dnsmasqd, as root: <pre>/etc/rc.d/dnsmasq start</pre></li>
+
* [[Daemons#Managing_daemons|Start]] the '''dnsmasq''' daemon.
<li>Finally, set firewall to forward connections to and from the Internet for clients connecting to your wlan. This is done by issuing (you guessed it right, as root again): <pre>iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</pre> In the above the '''''ppp0''''' interface is the used ppp interface, you can substitute it for yours if needed.</li>
+
* Finally, set firewall to forward connections to and from the Internet for clients connecting to your WLAN. This is done by issuing:
<li>You are done! Happy surfing</li>
+
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
</ol>
+
:In the above the '''ppp0''' interface is the used PPP interface, you can substitute it for yours if needed.
 +
* You are done! Happy surfing!
  
{{Warning|The previous configuration has no security options enabled!<br>If you are using firewall, you should adapt this documentation to suit your needs.<br>Same applies also to setting up keys for wlan interface.}}
+
{{Warning|The previous configuration has no security options enabled. If you are using a firewall, you should adapt this documentation to suit your needs. Same applies also to setting up keys for WLAN interface.}}
  
 
=== Network Bridge ===
 
=== Network Bridge ===
Let's assume your ppp connection is on eth0, and you want to share the connection on eth1 and eth2.
+
Let's assume your PPP connection is on '''eth0''', and you want to share the connection on '''eth1''' and '''eth2'''.
  
  ip addr add 0.0.0.0 dev eth1  # remove IP from eth0
+
  # ip addr add 0.0.0.0 dev eth1  # remove IP from eth0
  ip link set eth1 up          # ensure the interface is up
+
  # ip link set eth1 up          # ensure the interface is up
  
  ip addr add 0.0.0.0 dev eth2  # remove IP from eth1
+
  # ip addr add 0.0.0.0 dev eth2  # remove IP from eth1
  ip link set eth2 up          # ensure the interface is up
+
  # ip link set eth2 up          # ensure the interface is up
  
  brctl addbr br0              # create br0 node
+
  # brctl addbr br0              # create br0 node
  brctl addif br0 eth1          # add eth0 to bridge br0
+
  # brctl addif br0 eth1          # add eth0 to bridge br0
  brctl addif br0 eth2          # add eth1 to bridge br0
+
  # brctl addif br0 eth2          # add eth1 to bridge br0
  
  ip addr add 192.168.0.254 dev br0
+
  # ip addr add 192.168.0.254 dev br0
change your interface in dnsmasq.conf to br0
+
change your interface in {{ic|dnsmasq.conf}} to '''br0''':
 
  interface=br0  
 
  interface=br0  
 +
and [[Daemons#Managing_daemons|restart]] the '''dnsmasq''' daemon.
  
then start dnsmasq
+
Now you should be able to connect to the internet using '''eth1''' or '''eth2'''.
/etc/rc.d/dnsmasq start
+
  
now you can connect to the internet using eth1 or eth2.
+
== Sharing via WLAN ==
  
=== See Also ===
+
=== Instructions ===
*[[Internet Share]]
+
*[[Simple stateful firewall HOWTO]]
+
*[[NAT'ing firewall - Share your broadband connection]]
+
*[[Wireless Setup]]
+
*[[USB 3G Modem]]
+
  
== Sharing via WLAN ==
+
* Set up the PPP connection.
=== Requirements ===
+
* Set up the WLAN connection: choose an SSID and select Ad-hoc as network type. In the following it is assumed that you are using the '''wlan0''' interface.
The following programs must have been installed in order to share the ppp connection:
+
# Programs for configuring your wlan card (package '''wireless_tools''')
+
# Programs for configuring generic network interface card (package '''net-tools''')
+
# The '''iptables''' program which is used to manipulate how data is passed through your machine from your clients and back (package '''iptables''')
+
# '''dnsmasq''' software for acting as a DHCP and DNS caching server (package '''dnsmasq''')
+
  
The following conditions must also have been met:
+
: Set the '''wlan0''' interface up address for example 192.168.0.254. Setting up the interface is usually done by running:
# You must have a working ppp connection (I'm using [[Bluetooth_GPRS_Howto|bluetooth+gprs]] to connect to the Internet)
+
# iw wlan0 set type ibss
# You must have a working wlan interface card (in terms of "can be used in Linux")
+
# iw wlan0 ibss join MyFreeWlan
  
=== Instructions ===
+
: After that you can assign an IP address to the interface as usual, by running:  
<ol>
+
# ip addr add 192.168.0.254 dev wlan0
<li>Set the ppp connection up.</li>
+
: Please note that different wlan cards may be configured differently and one should adapt this documentation accordingly.
<li>Set the wlan connection up. Choose ssid and select ad-hoc as network type. In the following I'm assuming that you are using interface named '''''wlan0'''''. Set the wlan interface up address for example 192.168.0.254 . Setting up the interface is usually done by running the '''iwconfig''' program as root, with syntax like: <pre>iwconfig wlan0 essid "My_Free_Wlan" mode Ad-Hoc</pre> After that you can assign an ip address to the interface as usual, by running (again, as root): <pre>ifconfig wlan0 192.168.0.254</pre> Please note that different wlan cards may be configured differently and one should adapt this documentation accordingly.
+
* Set the kernel to router mode. This is done by running:
<li>Set the kernel to router mode. This is done by running as root: <pre>echo 1 > /proc/sys/net/ipv4/ip_forward</pre></li>
+
# echo 1 > /proc/sys/net/ipv4/ip_forward
<li>Configure '''dnsmasq'''. Make the following changes to /etc/dnsmasq.conf (uncomment if necessary): <pre>
+
* Configure '''dnsmasq'''. Make the following changes to {{ic|/etc/dnsmasq.conf}} (uncomment if necessary):
 +
{{hc|etc/dnsmasq.conf|<nowiki>
 
domain-needed
 
domain-needed
 
bogus-priv
 
bogus-priv
interface=wlan0 (or whatever interface your wlan is)
+
interface=wlan0   # change to your interface
dhcp-range=192.168.0.1,192.168.0.100,12h
+
dhcp-range=192.168.0.1,192.168.0.100,12h</nowiki>
</pre></li>
+
}}
<li>Start dnsmasq as root: <pre>/etc/rc.d/dnsmasq start</pre></li>
+
* [[Daemons#Managing_daemons|Start]] the '''dnsmasq''' daemon.
<li>Finally, set firewall to forward connections to and from the Internet for clients connecting to your wlan. This is done by issuing (you guessed it right, as root again): <pre>iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</pre> In the above the '''''ppp0''''' interface is the used ppp interface, you can substitute it for yours if needed.</li>
+
* Finally, set firewall to forward connections to and from the Internet for clients connecting to your WLAN. This is done by issuing:  
<li>You are done! Happy surfing</li>
+
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
</ol>
+
  
{{Warning|The previous configuration has no security options enabled!<br>If you are using firewall, you should adapt this documentation to suit your needs.<br>Same applies also to setting up keys for wlan interface.}}
+
: In the above the '''ppp0''' interface is assumed to be the used PPP interface, you can substitute it for yours if needed.
 +
* You are done! Happy surfing!
  
=== Sharing script ===
+
{{Warning|The previous configuration has no security options enabled! If you are using firewall, you should adapt this documentation to suit your needs. Same applies also to setting up keys for wlan interface.}}
As requested at ArchCon 2010, a quick script for sharing eth0 over wlan0 on an ad-hoc network.
+
  
<pre>
+
== Sharing Script ==
 +
A quick script for sharing '''eth0''' over '''wlan0''' on an ad-hoc network.
 +
{{hc|ethoverwlan.sh|
 
#!/bin/bash
 
#!/bin/bash
  
iwconfig wlan0 mode ad-hoc
+
iw wlan0 set type ibss
iwconfig wlan0 essid proxywlan
+
iw wlan0 ibss join proxywlan
ifconfig wlan0 192.168.11.1 up
+
ip addr add 192.168.0.254 dev wlan0
 +
ip link set wlan0 up
 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 
echo 1 > /proc/sys/net/ipv4/ip_forward
 
echo 1 > /proc/sys/net/ipv4/ip_forward
</pre>
+
}}
  
=== See Also ===
+
== See Also ==
*[[Internet Share]]
+
* [[Internet Share]]
*[[Simple stateful firewall HOWTO]]
+
* [[Simple stateful firewall HOWTO]]
*[[NAT'ing firewall - Share your broadband connection]]
+
* [[NAT'ing firewall - Share your broadband connection]]
*[[Wireless Setup]]
+
* [[Wireless Setup]]
*[[USB 3G Modem]]
+
* [[USB 3G Modem]]
 +
* [http://go2linux.garron.me/linux/2011/03/share-your-3g-internet-connection-over-wifi-linux-ipod-touch-925 Share your 3G Internet connection over wifi]

Revision as of 23:28, 9 June 2013


Requirements

Before proceeding, you must make sure:

  1. You must have a working PPP connection.
  2. You must have an extra Ethernet interface card in your computer with which to share your connection.

Installing

The following packages must be installed from the official repositories for both Wired and Wireless sharing:

  • iptables: for controlling packets in your network.
  • dnsmasq: for acting as a DHCP and DNS caching server.
  • bridge-utils: for setting up a network bridge.

Depending on whether you want to share a wireless or wired connection, you also have to install:

  • wired: iproute2 or net-tools (this article uses iproute2 since net-tools is deprecated).
  • wireless: iw or wireless_tools (this article uses iw since wireless_tools is deprecated).

Sharing via Wired Ethernet

  • Set the PPP connection up.
You can assign an IP address to the interface as usual, by running (as root):
# ip addr add 192.168.0.254 dev eth0
  • Set the kernel to router mode. This is done by running:
# echo 1 > /proc/sys/net/ipv4/ip_forward
  • Configure dnsmasqd. Make the following changes to /etc/dnsmasq.conf (uncomment if necessary):
/etc/dnsmasq.conf
domain-needed
bogus-priv
interface=eth0 # change to your chosen interface
dhcp-range=192.168.0.1,192.168.0.100,12h
  • Start the dnsmasq daemon.
  • Finally, set firewall to forward connections to and from the Internet for clients connecting to your WLAN. This is done by issuing:
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
In the above the ppp0 interface is the used PPP interface, you can substitute it for yours if needed.
  • You are done! Happy surfing!
Warning: The previous configuration has no security options enabled. If you are using a firewall, you should adapt this documentation to suit your needs. Same applies also to setting up keys for WLAN interface.

Network Bridge

Let's assume your PPP connection is on eth0, and you want to share the connection on eth1 and eth2.

# ip addr add 0.0.0.0 dev eth1  # remove IP from eth0
# ip link set eth1 up           # ensure the interface is up
# ip addr add 0.0.0.0 dev eth2  # remove IP from eth1
# ip link set eth2 up           # ensure the interface is up
# brctl addbr br0               # create br0 node
# brctl addif br0 eth1          # add eth0 to bridge br0
# brctl addif br0 eth2          # add eth1 to bridge br0
# ip addr add 192.168.0.254 dev br0

change your interface in dnsmasq.conf to br0:

interface=br0 

and restart the dnsmasq daemon.

Now you should be able to connect to the internet using eth1 or eth2.

Sharing via WLAN

Instructions

  • Set up the PPP connection.
  • Set up the WLAN connection: choose an SSID and select Ad-hoc as network type. In the following it is assumed that you are using the wlan0 interface.
Set the wlan0 interface up address for example 192.168.0.254. Setting up the interface is usually done by running:
# iw wlan0 set type ibss
# iw wlan0 ibss join MyFreeWlan
After that you can assign an IP address to the interface as usual, by running:
# ip addr add 192.168.0.254 dev wlan0
Please note that different wlan cards may be configured differently and one should adapt this documentation accordingly.
  • Set the kernel to router mode. This is done by running:
# echo 1 > /proc/sys/net/ipv4/ip_forward
  • Configure dnsmasq. Make the following changes to /etc/dnsmasq.conf (uncomment if necessary):
etc/dnsmasq.conf
domain-needed
bogus-priv
interface=wlan0    # change to your interface
dhcp-range=192.168.0.1,192.168.0.100,12h
  • Start the dnsmasq daemon.
  • Finally, set firewall to forward connections to and from the Internet for clients connecting to your WLAN. This is done by issuing:
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
In the above the ppp0 interface is assumed to be the used PPP interface, you can substitute it for yours if needed.
  • You are done! Happy surfing!
Warning: The previous configuration has no security options enabled! If you are using firewall, you should adapt this documentation to suit your needs. Same applies also to setting up keys for wlan interface.

Sharing Script

A quick script for sharing eth0 over wlan0 on an ad-hoc network.

ethoverwlan.sh
#!/bin/bash

iw wlan0 set type ibss
iw wlan0 ibss join proxywlan
ip addr add 192.168.0.254 dev wlan0
ip link set wlan0 up
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

See Also