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.