| Virtual Ethernet Device |
| ======================= |
| |
| Virtual Ethernet device pairs are a pair of fake Ethernet devices that act |
| as a pipe, Traffic sent via one interface comes out the other. As these are |
| Ethernet devices and not point to point devices you can handle broadcast |
| traffic on these interfaces and use protocols other than IP. |
| |
| To create a virtual ethernet pipe with one end called veth0 and the other |
| called veth1, use the following command: |
| |
| sudo ip link add veth0 type veth peer name veth1 |
| |
| The pair of interfaces are identical and act as a dumb pipe, there is no |
| master or slave end. Deleting either end will cause both interfaces to be |
| deleted. The pair of interfaces implement carrier detection and can tell |
| when one side of the link is in the 'DOWN' state. if the other link is in |
| the 'DOWN' state it will indicate 'NO-CARRIER' until the other end is |
| brought up: |
| |
| sudo ip link set veth0 up |
| sudo ip link set veth1 up |
| |
| |
| Testing 802.1x on Virtual Ethernet Device |
| ========================================= |
| |
| It is based on hostapd and wpa_supplicant. To compile them, go in the |
| hostapd/wpa_supplicant directory, copy "defconfig" to ".config", for |
| hostapd uncomment the line "CONFIG_DRIVER_WIRED=y" and "make". |
| |
| Using hostapd (the authenticator) and following hostapd.conf file: |
| |
| interface=veth0 |
| driver=wired |
| ieee8021x=1 |
| use_pae_group_addr=1 |
| eap_server=1 |
| eap_user_file=hostapd.eap_user # replace with the right path |
| ca_cert=newcertca.crt # replace with your CA certificate path |
| server_cert=newcertca.crt # replace with your server certificate path (here I use the same as for the CA for simplicity) |
| private_key=newkeyca.key # replace with your server private key path |
| |
| A sample hostapd.eap_user that works is the following: |
| |
| # Phase 1 users |
| * PEAP |
| # Phase 2 |
| "test" MSCHAPV2 "password" [2] |
| |
| To execute hostapd (add "-dd" for debug mode): |
| |
| sudo ./hostapd hostapd.conf |
| |
| Using wpa_supplicant (the supplicant, i.e., the client) with the following |
| wpa_supplicant.conf configuration file: |
| |
| ap_scan=0 |
| fast_reauth=1 |
| network={ |
| ssid="" |
| scan_ssid=0 |
| key_mgmt=IEEE8021X |
| eap=PEAP |
| phase2="auth=MSCHAPV2" |
| identity="test" |
| password="password" |
| ca_cert="newcertca.crt" # replace with your CA certificate path |
| } |
| |
| To run wpa_supplicant (add "-dd -K" for debugging): |
| |
| sudo ./wpa_supplicant -iveth1 -c./wpa_supplicant.conf -Dwired |
| |
| |
| Running Authenticator in a network namespace |
| ============================================ |
| |
| In some cases it might be useful to run hostapd in a network namespace to |
| provide real separation between the two network interfaces. First create |
| the "hostap" named network namespace: |
| |
| sudo ip netns add hostap |
| |
| Now move the network interface of hostapd into the "hostap" named network |
| namespace: |
| |
| sudo ip link set veth0 netns hostap |
| |
| Inside the "hostap" named network namespace the loopback interface needs |
| to be brought up and also the network interface: |
| |
| sudo ip netns exec hostap ip link set lo up |
| sudo ip netns exec hostap ip link set veth0 up |
| |
| Then execute hostapd inside the network namespace: |
| |
| sudo ip netns exec hostap ./hostapd wired_hostapd.conf |
| |
| After that run wpa_supplicant as described above. |