gluon-supernode-docker/Vagrantfile

153 lines
4.0 KiB
Ruby

# -*- 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 <<EOF
config fastd 'vpn'
list method 'salsa2012+umac'
list method 'salsa2012+gmac'
list method 'null+salsa2012+umac'
option mtu 1300
option status_socket '/var/run/fastd.mesh_vpn.socket'
option packet_mark 1
option mode 'tap'
option secure_handshakes '1'
option interface 'fastd-vpn'
option enabled '1'
option secret 'f80481c9d3c4567549d0769011d0442172070c033818f487dcb535a77823514a'
config peer_group 'mesh_vpn_backbone'
option enabled '1'
option peer_limit '2'
option net 'vpn'
config peer vpn_server
option enabled 1
option key '5d7046023a57481415378c430d71d6603e47e45760722bfa7dd5d35e160a62c4'
option net 'vpn'
list remote '#{vpn_server}:10000'
option group 'mesh_vpn_backbone'
EOF
cat >/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