use File::Slurp;
use server;
+use ip;
sub ifconfig {
my $dev = shift;
`/sbin/ifconfig $dev`
}
+sub setup {
+
+ if ( my $dev = $ENV{DEV} ) {
+ warn "W: running under device $dev, not configuring network\n";
+ return;
+ }
+
+ my $ifconfig = ifconfig('virtual');
+ if ( $ifconfig !~ m{UP} ) {
+ system "brctl addbr virtual";
+ system "brctl setfd virtual 0";
+ system("/sbin/ifconfig virtual $server::ip netmask $server::netmask") == 0 || warn "W: $!";
+ } else {
+ warn "using existing virtual configuration\n$ifconfig\n";
+ }
+ if ( my $dev = ip::default_route_dev() ) {
+ system "sudo sysctl -w net.ipv4.ip_forward=1";
+ my $network = ip::from_int( ip::to_int($server::ip) & ip::to_int($server::netmask) );
+ warn "# network $network";
+ system "sudo iptables -t nat -L POSTROUTING -n | grep $network || sudo iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o $dev -j MASQUERADE";
+ warn "masquarade to $dev";
+ }
+}
+
sub tap {
+ if ( my $dev = $ENV{DEV} ) {
+ warn "W: running under device $dev, not configuring tap0\n";
+ return;
+ }
+
+ if ( $server::ip !~ m{^172} ) {
+ warn "W: server ip mismetch, not configuring tap0\n";
+ return;
+ }
+
my $interfaces = read_file '/etc/network/interfaces';
if ( $interfaces !~ m{tap0}s ) {
- system "sudo apt-get install vde2";
+ system "sudo apt-get install -y vde2";
write_file '/tmp/interfaces', qq{