153 lines
4.0 KiB
Ruby
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
|