====== Wi-Fi to eth (bridge) routing ======
This Howto describes, how to interconnect wireless and wired network interfaces on the same Linux computer, to enable unmodified TCP/IP packets to pass from one interface to the other. In other places this is mentioned as network bridge or Wi-Fi line extender or Wi-Fi Internet share.
**The reason for this HOWTO: the word __bridge__ is misleading**
For a network bridge we assume a device that transfers unmodified network packets from one network connection to the other.
One can create a bridge device (virtual) and add members to it. This works only for bridge members of type wired - //eth// network cards. A network Bridge "connects" members on [[wp>OSI_model|level 3 of the OSI model]]. That means communication on TCP/IP level.\\
When you want to add a Wi-Fi device to the bridge, you hit a barrier: Wi-Fi devices communicate on [[wp>OSI_model|level 2 of the OSI model]].
You can find many manuals on the Internet that document how to circumvent this (in the form of putting the Wi-Fi card in [[https://wiki.openwrt.org/doc/howto/clientmode|4addr mode]]). This simply DOES NOT WORK!\\
The Wi-Fi network card (member of the bridge) authenticates and connects to the Wireless Access Point (AP), but TCP/IP packets do not travel over the connection.\\
So searching for "wifi eth bridge" does not return any useful solution. The culprit is the word "bridge".
====== General solution ======
A working solution is "Proxy ARP Routing".\\
You simply enable IP forwarding and then for every device connected to the wired (eth) side of a "bridge" you have to add a routing line to the routing table. This can be automated by a program like [[http://freecode.com/projects/parprouted|parprouted]] - the Proxy ARP routing daemon.
Reading of the [[https://linux.die.net/man/8/parprouted|parprouted man page]] is highly recommended to be aware of its limitations
====== Solution for Slackware, step-by-step ======
Tested and working on Slackware64-14.2, kernel-4.11.6, CPU i5-7200
This solution is for static IP addresses. See below link of original source for a scenario that uses DHCP.
**Assumptions**:\\
We want to interconnect one Wi-Fi and one wired (eth) network card - the network devices ''wlan0'' and ''eth0''.\\
Prepare Slackware box so that you are able to communicate over the Wi-Fi adapter (using NetworkManager, rc.inet1 or other means...), making sure that the wired (eth) adapter is not being used.\\
I had set up WPA2 AES verification with NetworkManager to get a usable ''wpa_supplicant.conf'' configuration file which I used later with rc.inet1.\\
Disable all on-boot network configurations (i.e. make sure that ''rc.networkmanager'' or other files for network setup are not executable) and set ''rc.inet1'' executable.
- IP forwarding must be enabled in the kernel (since the 2.1 release the Linux kernel does not require an explicit compilation option for this)
- download & compile & install [[http://www.hazard.maks.net/parprouted/parprouted-0.7.tar.gz]] :!:
- edit ''/etc/rc.d/rc.inet1.conf'' so to enable ''wlan0'' and ''eth0''. Assign them static IP addresses and set ''wlan0'' to the lowest index and connect to the AP\\ Below are example lines from ''/etc/rc.d/rc.inet1.conf'' - the only ones without comment sign "#" at the beginning and for WPA2 Wi-Fi authentication
IFNAME[1]="eth0"
IPADDR[1]="10.200.200.223"
NETMASK[1]="255.255.255.0"
GATEWAY="10.200.200.1"
DEBUG_ETH_UP="no"
IFNAME[0]="wlan0"
IPADDR[0]="10.200.200.222"
NETMASK[0]="255.255.255.0"
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""
WLAN_MODE[0]=Managed
WLAN_ESSID[0]="R7500"
WLAN_WPA[0]="wpa_supplicant"
WLAN_WPADRIVER[0]="wext"
- set ''/etc/rc.d/rc.ip_forward'' executable:
# chmod +x /etc/rc.d/rc.ip_forward
- add a line
/usr/local/sbin/parprouted wlan0 eth0
to ''/etc/rc.d/rc.local'' and make sure that this file is executable
That's all. Reboot and you have a working Wi-Fi - eth bridge, also called Wi-Fi extender or Wi-Fi Internet share.
:!: Note on parprouted compilation:\\
The ''parprouted'' man page section "Requirements" says: //"parprouted requires the "ip" program from iproute2 tools to be installed in /sbin. If it is installed in another location, please replace "/sbin/ip" occurrences in the source with the correct path"//.\\
Slackware installs the ''ip'' program as ''/sbin/ip'' so you should be OK.
====== DHCP enabled variant ======
Look below for a solution in a source link.
====== Sources ======
* Written by [[wiki:user:slacker | Zdenko Dolar]], August 2017
* Original source:[[https://wiki.debian.org/BridgeNetworkConnectionsProxyArp]]
{{tag>howtos network WiFi bridge author_slacker}}