MikroTik WiFi CAP Configuration


MikroTik WiFi CAP Configuration

  • Terminology
    • CAP device is the abbreviation for Controlled Access Point
    • CAPsMAN is the CAP manager and has an enabled CAPsMAN service
    • WinBox is a desktop application for managing Mikrotik devices
    • WinBox can be installed on Linux as a snap package and is probably
      the easiest way to connect to a Mikrotik device, since it uses Layer 2 network
      communication and therefore does not require an IP address in the LAN subnet.

  • MikroTik device
  • When MikroTik device is first powered up, the default IP address is
    192.168.88.1, admin password is empty and the SSID
    is Mikrotik. If LAN subnet is different, the easiest way
    to change configuration is to connect via WiFi to open the web
    configuration at 192.168.88.1.

    • Select Quick Set (top right) and select CAP in combobox just below
    • Configure network address
    • Choose MikroTikCAPsMAN as router identity
    • Select Bridge All LAN Ports as router identity

    Use UP arrow to revert back to default in options to follow when setting up a configuration
    or device settings which refers to some other configuration.

  • CAPsMAN manager device
    • Select WebFig (top right) and select CAPsMAN (left top)
    • Under CAP Interface tab, press Manager and select Enable and choose
      • Select Enabled
      • Choose require same version under Upgrade Policy
      • Press OK
    • Under Channels tab press Add New
      • Set Name to channel1
      • Set Frequency to 2412
      • Set Control Channel Width to 20MHz
      • Set Band to 2ghz-g/n
      • Press OK
      • Add another channel called channel6 with Frequency as 2442
      • (other properties remain the same)

      • Add another channel called channel11 with Frequency as 2472
      • (other properties remain the same)

    • Under Datapaths tab press Add New
      • Set Name to datapath1
      • Set Bridge to bridgeLocal (or whatever the default bridge is)
      • Select Local Forwarding (traffic handled by each CAP and not by CAPsMAN)
      • Select Client To Client Forwarding (allow WiFi clients to see each other)
      • Press OK
    • Under Security Cfg. tab press Add New
      • Set Name to secure
      • Select WPA PSK2 in Authentication Type
      • Select aes ccm in Encryption
      • Set Passphrase to your WiFi password
      • Select Local Forwarding (traffic handled by each CAP and not by CAPsMAN)
      • Select Client To Client Forwarding (allow WiFi clients to see each other)
      • Press OK
    • Under Configuration tab press Add New
      • Select Enabled
      • Set Name to cfg1
      • Choose none as Master Interface
      • Choose ap in Mode
      • Enter SSID
      • Choose Country
      • Choose indoor in Installation
      • Choose datapath1 in Datapath (see Datapath configuration)
      • Select secure in Security (see Security Cfg. configuration)
      • Press OK
    • Under Provisioning tab press Add New
      • Select Enabled
      • Set Action as create dynamic enabled
      • Set Master Configuration (see Configuration definition)
      • Set Name Format as cap
      • Set Name Prefix to some value
      • Press OK
    • Select Wireless menu item on the left and select WiFi Interfaces tab
      • Press CAP button
        • Select Enabled
        • Select wlan1 in Interfaces
        • Select none in Certificate
        • Select ether1 in Discovery interface
        • Select none in Bridge
        • Press OK
      • Set Action as create dynamic enabled
      • Set Master Configuration (see Configuration definition)
      • Set Name Format as cap
      • Set Name Prefix to some value
      • Press OK
    • Select CAPsMAN menu item on the left and select CAP Interfaces tab
      • Press Add New button
      • Set Name to cap1
      • Set Channel to channel1
      • Press OK

  • CAP device (controlled by CAPsMAN)
  • The easiest way to configure a CAP device is by connecting via WinBox and
    linking the device to a CAPsMAN manager.

    • Connect to the device using WinBox
      • Navigate to Quick Set using the menu on the left
      • Set mode (combo box at top) to CAP
      • Set Address Acquisition to Automatic
      • Set Address Source to Ethernet
      • Select Bridge All LAN Ports
      • Set Router Identity to a unique name on the LAN
      • Change password
      • Press OK
      • Navigate to Wireless using the menu on the left
      • Select the WiFi Interfaces tab
      • Press CAP button
      • Select Enabled
      • Set Interface to wlan1
      • Set Certificate to none
      • Set Discovery Interface to ether1 (if devices are linked via ethernet)
      • Set Bridge to bridgeLocal
      • Press OK
  • References:

Linux Lost Password – Recover Linux User


Recover a Linux installation after loosing the administrator user password

  • Download a Linux live CD
  • It can be any linux distro as long as your architecture is the same as the installation.
    Lets go with Ubuntu desktop, because instructions may be slightly different for different
    distros.

    https://ubuntu.com/download/desktop/thank-you?version=20.04.2.0&architecture=amd64

  • Burn the ISO to a CD
  • Boot the machine with lost password from the CD
  • In the case of Ubuntu, you will have the option to “Install Ubuntu” or “Try Ubuntu”.
    Select “Try Ubuntu”, otherwise you risk formatting your disk(s).
    (You might have to select a language somewhere in the process)

  • Start terminal
  • When Ubuntu desktop is ready, click on “Activities” or press the Windows button. When
    activity search appears, type “term” – the “Terminal” app should appear – open it.

  • From the terminal, execute the following:
  • sudo bash
    # You should now be "root" user
    
  • Find disks and partitions
  • Use any combination of the following commands to get information about partitions:

    fdisk -l
    lsblk
    

    Valid entries should look like this:
    /dev/sd*
    /dev/nvme*

  • Create a mount point to work with
  • mkdir -p /mnt/linux
    
  • Figure out on which drive Linux is installed
  • The partion where Linux is installed, should typically have an “ext4”
    filesystem if it is a recent version of Ubuntu, but it may be different if
    other options or distros were installed. Here is an example of how you would
    check if a partition (e.g. /dev/sda1) contains linux:

    mount /dev/sda1 /mnt/linux
    ls /mnt/linux/boot
    

    If anyone of these fails, Linux is not on it. You can umount the partition with the following command
    if this is the wrong partition before moving on to check another partition:

    umount /mnt/linux
    

  • Having found a Linux partion, do the following:
  • chroot /mnt/linux
    

    If this fails, this is not the partition you are looking for. However, if the installation is a x86 installation
    it will not work if you booted an amd64 cd. The error message should be very clear and you should
    then download an older version of Ubuntu or Lubuntu that is x86 – you can use this link:
    https://cdimage.ubuntu.com/lubuntu/releases/18.04.5/release/lubuntu-18.04.5-desktop-i386.iso

  • Add user or change password
  • If the chroot command succeeded, you should now be root user in the installed linux and you
    can manipulate the users and configuration. To create a temp user with admin rights, do the following:

    useradd -d /home/tempadmin -m -s /bin/bash -g users -G sudo tempadmin
    passwd tempadmin
    

    (You can also change existing user passwords using passwd command)

    Now edit ssh configuration to make sure you can log in via ssh: (this tutorial
    assumes openssh-server was installed on the machine.

    nano /etc/ssh/sshd_config
    

    You need to comment out “AllowUsers” or “AllowGroups” lines, since they might block your new user.
    You also need to enable “PasswordAuthentication yes”
    On the server in question, the rest of the settings should be ok. Save the and close the file (Ctrl+X)

  • Unmount the partition
  • unmount /mnt/linux
    

  • You can now and reboot normally
  • Once machine is booted completely, follow these steps:

    • First log in with your newly created username
    • Open a terminal and get the address with one of the following commands:
    •   ip a
        ifconfig
        

    • Check whether routing and DNS is configured correctly:
    •   ping 8.8.8.8
        ping www.google.com
        

    • Test ssh access
    • Now you can test ssh access using the address you got earlier trying to ssh to the machine from a different workstation.

        ssh tempadmin@
        

      If the only other machine you have is a Windows without Linux For Windows installed, you can download Putty from
      https://www.ssh.com/ssh/putty/download

    • Check if the user has administrator access
    • The last thing you need to check is if the user is an administrator:

        sudo bash
        whoami
        

      You would need to enter your password, but then whoami should report
      that you are root.

    Disclamer: Anyone using any of these instructions do so at their own risk. Neither the author or anyone or any company related to this site takes any responsibility for effects performing any of the tasks on any device.


Hypervisor Information


Get information of underlying hypervisor from Linux VM


Execute the following command in the VM

sudo dmidecode | grep -i -e manufacturer -e product -e vendor


Fedora Network Install via PXE Boot




Fedora network install via PXE boot – Unix & Linux Stack Exchange

Fedora network install via PXE boot – Unix & Linux Stack Exchange

It is also possible to setup a Proxy DHCP service for PXE. Thus, the existing DHCP server does not need to be changed. A normal Linux system (e.g. a workstation) can then be used to host the preboot execution environment (PXE).

Following steps are necessary to setup a PXE for net-booting a Fedora network install image (assuming also a Fedora host):

Verify the Image

$ gpg --verify Fedora-Server-21-x86_64-CHECKSUM
$ sha256sum --check Fedora-Server-21-x86_64-CHECKSUM
Fedora-Server-netinst-x86_64-21.iso: OK

Mount the Image

mkdir /mnt/iso
mount -o loop Fedora-Server-netinst-x86_64-21.iso /mnt/iso

DHCP Setup

yum install dnsmasq tftp-server syslinux-tftpboot

The tftp-server package is just for creating the directory /var/lib/tftpboot, dnsmasq already has a tftp server integrated.

The config:

cat > /etc/dnsmasq.conf
interface=enp0s25
# and don't bind to 0.0.0.0
bind-interfaces
# extra logging
log-dhcp
dhcp-range=192.168.178.0,proxy
# first IP address is the one of the host
dhcp-boot=pxelinux.0,192.168.178.34,192.168.178.0
pxe-service=x86PC,"Automatic Network Boot",pxelinux
# Specify the IP address of another tftp server
enable-tftp
# default location of tftp-server on Fedora
tftp-root=/var/lib/tftpboot
# disable DNS
port=0

Start it:

systemctl start dnsmasq.service

Setup TFTP directory

Copy all needed files:

cp /mnt/iso/images/pxeboot/initrd.img /var/lib/tftpboot
cp /mnt/iso/images/pxeboot/vmlinuz /var/lib/tftpboot
cp /tftpboot/pxelinux.0 /var/lib/tftpboot
cp /tftpboot/vesamenu.c32 /var/lib/tftpboot
cp /tftpboot/ldlinux.c32 /var/lib/tftpboot
cp /tftpboot/libcom32.c32 /var/lib/tftpboot
cp /tftpboot/libutil.c32 /var/lib/tftpboot

Add config:

mkdir /var/lib/tftpboot/pxelinux.cfg
cat > /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
prompt 0
# disable timeout
timeout 0
#timeout 600

# if file is missing, this is ignored
display boot.msg

label linux
  menu label Install Fedora 21 Server x86-64
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=http://workstation.example.org/

Setup HTTP Server

yum install nginx

Configure instance:

cat > /etc/nginx/conf.d/iso.conf
  server {
      listen       80 default_server;
      server_name  localhost;
      root         /mnt/iso ;
      include /etc/nginx/default.d/*.conf;
  }

Disable the default instance/move it to a different port:

--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -43,7 +43,7 @@ http {
     include /etc/nginx/conf.d/*.conf;

     server {
-        listen       80 default_server;
+        listen       8080 default_server;
         server_name  localhost;
         root         /usr/share/nginx/html;

start the server:

systemctl start nginx.service

The Fedora installer (dracut) basically just needs to get one file from that
http server:

LiveOS/squashfs.img

Configure Firewalld

firewall-cmd --add-service=http
firewall-cmd --add-service=dhcp
firewall-cmd --add-service=tftp
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --add-service=tftp --permanent

Boot Clients

That’s it. Clients are know able to network boot via PXE and get the Fedora netinstall image.

Variations could be: Adding a kickstart file (and setting a timeout) for a fully automatic network install, configuring different PXE settings for different clients (based on the MAC address), etc.

Cleanup

The daemons can be stopped and the loopback image can be unmounted:

systemctl stop nginx.service
systemctl stop dnsmasq.service
umount /mnt/iso

Security Note

This method should only be executed in a trustful intranet because the netboot client gets its config and several images absolutely unsecured over TFTP and HTTP.


autoDCHP



Auto proxy configuration using DHCP


(DHCP3 server required)

For more information, see Web Proxy Autodiscovery Protocol

Also look at Microsoft Technet

Some handy javascript functions

This file assumes the IP of the DHCP server as well as the proxy servers are 192.168.0.1

apt-get install apache2 dhcp3-server

Edit /etc/apache2/httpd.conf and add this line:

AddType application/x-ns-proxy-autoconfig .dat

Edit /etc/dhcp3/dhcpd.conf (as well as /etc/ltsp/dhcpd.conf) and add this line:

option custom-proxy-server code 252 = text;
option custom-proxy-server “http://192.168.0.1/wpad.dat”;

Create the proxy configuration file ( /var/www/wpad.dat ). The code is javascript and the
function you have to implement is FindProxyForURL. Example contents to follow:

function FindProxyForURL(url, host)
{

// Add hostname exceptions for sites you do not want to
// proxy e.g. internal servers

if(shExpMatch(url,”*.softco/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*.softco:*/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*micky/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*micky:*/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*pluto/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*pluto:*/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*goofy/*”)) { return “DIRECT”; }
if(shExpMatch(url,”*goofy:*/*”)) { return “DIRECT”; }

// End hostname exceptions

// If you want to allow a specific IP range to go direct, use the line
// below or remove it

if(isInNet(host, “10.0.0.0”, “255.0.0.0”)) { return “DIRECT”; }
if(isInNet(host, “192.168.0.0”, “255.255.0.0”)) { return “DIRECT”; }
if(isInNet(host, “172.16.0.0”, “255.240.0.0”)) { return “DIRECT”; }

// End network exceptions

// Always bypass for localhost – make sure these 3 lines remain
if (shExpMatch(host, “localhost*”) || shExpMatch(host, “127.0.0.1*”)) {
return “DIRECT”;
}

// The browser is on a specific network, so send it a specific proxy to use
// This is useful for multi-subnet networks with multiple CensorNet servers
// Remove if you do not need this

if(shExpMatch(url,”*.archive.ubuntu.com/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*.archive.ubuntu.com:*/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*.security.ubuntu.com/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*.security.ubuntu.com:*/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*download.virtualbox.org/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*download.virtualbox.org/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*ppa.launchpad.net/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*ppa.launchpad.net:*/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*dl.google.com/linux/*/deb/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*dl.google.com:*/linux/*/deb/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*packages.medibuntu.org/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*packages.medibuntu.org:*/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*www.scootersoftware.com/*”)) { return “PROXY 192.168.0.1:3142”; }
if(shExpMatch(url,”*www.scootersoftware.com:*/*”)) { return “PROXY 192.168.0.1:3142”; }

// Finally, if it isn’t to be bypassed and is not localhost, return
// the proxy IP and port to use

return “PROXY 192.168.0.1:3128”;
}