# -*- mode: ruby -*- # vi: set ft=ruby : def configure_node(config, name, ip, vpn_server) config.vm.define name do |node| node.vm.guest = "linux" node.vm.box = "freifunk-leipzig/openwrt" node.vm.boot_timeout = 60 node.ssh.shell = "/bin/ash" node.vm.network "private_network", ip: ip, auto_config: false node.vm.provider "virtualbox" do |vb| vb.memory = "256" vb.linked_clone = true vb.customize ["modifyvm", :id, "--nic3", "intnet", "--intnet3", "gluon-supernode-wan", "--nictype3", "virtio"] end node.vm.synced_folder './', '/vagrant', disabled: true node.vm.provision "shell", inline: <<-SHELL opkg update opkg install fastd kmod-batman-adv batctl-full vim cat >/etc/config/fastd </etc/config/network << EOF config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fdec:4589:e690::/48' config interface 'vagrant' option ifname 'eth0' option proto 'static' option ipaddr '10.0.2.15' option netmask '255.255.255.0' config interface 'private' option ifname 'eth1' option proto 'static' option ipaddr '#{ip}' option netmask '255.255.255.0' config interface 'bat0' option auto '1' option proto 'batadv' option routing_algo 'BATMAN_IV' option ap_isolation 0 option fragmentation 1 option gw_mode 'client' option multicast_mode 1 option mtu '1426' option fixed_mtu '1' config interface 'vpn' option auto '1' option ifname 'fastd-vpn' option proto 'batadv_hardif' option master 'bat0' config interface 'mesh' option auto '1' option ifname 'bat0' option proto 'dhcp' config interface 'mesh6' option auto '1' option ifname 'bat0' option proto 'dhcpv6' EOF /etc/init.d/fastd restart /etc/init.d/network restart #sleep 3 #ip route del default dev eth0 || true SHELL end end def configure_supernode(config, name, ip) config.vm.define name do |node| node.vm.hostname = name node.vm.box = "generic/debian11" node.vm.synced_folder ".", "/vagrant_data" node.vm.network "forwarded_port", guest: 10000, host: 10000, protocol: "udp" node.vm.network "private_network", ip: ip node.vm.provider "virtualbox" do |vb| vb.memory = "512" vb.linked_clone = true vb.customize ["modifyvm", :id, "--nic1", "nat", "--nictype1", "virtio"] # the pseudo wan net without any ip configuration vb.customize ["modifyvm", :id, "--nic2", "intnet", "--intnet2", "gluon-supernode-wan", "--nictype2", "virtio"] end node.vm.provision "shell", inline: <<-SHELL # reactivate ipv6 which disable per default in the vagrant box sed 's/^net.ipv6.conf.all.disable_ipv6 = 1//' -i /etc/sysctl.conf sysctl -w net.ipv6.conf.all.disable_ipv6=0 export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y docker.io docker-compose adduser vagrant docker || true # give docker daemon some time sleep 3 SHELL node.vm.provision "shell", privileged: false, inline: <<-SHELL cd /vagrant_data docker-compose up -d batman_network fastd_server dhcpd_v4 dhcpd_v6 radvd wireguard SHELL end end Vagrant.configure("2") do |config| configure_supernode(config, "supernode", "192.168.56.1") configure_node(config, "node", "192.168.56.2", "192.168.56.1") end