1 |
dpavlin |
82 |
package network; |
2 |
|
|
|
3 |
|
|
use warnings; |
4 |
|
|
use strict; |
5 |
|
|
|
6 |
|
|
use File::Slurp; |
7 |
|
|
|
8 |
|
|
use server; |
9 |
|
|
|
10 |
dpavlin |
83 |
sub ifconfig { |
11 |
|
|
my $dev = shift; |
12 |
|
|
`/sbin/ifconfig $dev` |
13 |
|
|
} |
14 |
|
|
|
15 |
dpavlin |
82 |
sub tap { |
16 |
|
|
|
17 |
dpavlin |
179 |
if ( my $dev = $ENV{DEV} ) { |
18 |
|
|
warn "W: running under device $dev, not configuring tap0\n"; |
19 |
|
|
return; |
20 |
|
|
} |
21 |
|
|
|
22 |
dpavlin |
175 |
if ( $server::ip !~ m{^172} ) { |
23 |
dpavlin |
179 |
warn "W: server ip mismetch, not configuring tap0\n"; |
24 |
dpavlin |
175 |
return; |
25 |
|
|
} |
26 |
|
|
|
27 |
dpavlin |
82 |
my $interfaces = read_file '/etc/network/interfaces'; |
28 |
|
|
|
29 |
dpavlin |
130 |
if ( $interfaces !~ m{tap0}s ) { |
30 |
dpavlin |
82 |
|
31 |
|
|
system "sudo apt-get install vde2"; |
32 |
|
|
|
33 |
dpavlin |
99 |
write_file '/tmp/interfaces', qq{ |
34 |
dpavlin |
82 |
|
35 |
dpavlin |
99 |
# added by PXElator |
36 |
|
|
iface tap0 inet static |
37 |
|
|
address $server::ip |
38 |
|
|
netmask $server::netmask |
39 |
|
|
vde2-switch - |
40 |
dpavlin |
144 |
# setup NAT for vde network |
41 |
|
|
post-up sysctl -w net.ipv4.ip_forward=1 |
42 |
|
|
post-up iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE |
43 |
dpavlin |
82 |
|
44 |
|
|
}; |
45 |
|
|
|
46 |
dpavlin |
99 |
system q|sudo sh -c 'cat /tmp/interfaces >> /etc/network/interfaces'|; |
47 |
|
|
system q|sudo sh -c 'usermod -G vde2-net -a $SUDO_USER'|; |
48 |
dpavlin |
82 |
|
49 |
|
|
} |
50 |
|
|
|
51 |
dpavlin |
84 |
my $ifconfig = ifconfig('tap0'); |
52 |
|
|
if ( $ifconfig =~ m{UP} ) { |
53 |
|
|
$ifconfig =~ m{$server::ip}s && return 'up'; |
54 |
|
|
system("sudo /sbin/ifconfig tap0 $server::ip netmask $server::netmask") == 0 && return "ip changed $server::ip"; |
55 |
|
|
die "can't change IP address of tap0 to $server::ip"; |
56 |
dpavlin |
140 |
} else { |
57 |
|
|
die "bring interface up with: sudo ifup tap0\n"; |
58 |
dpavlin |
84 |
} |
59 |
dpavlin |
82 |
} |
60 |
|
|
|
61 |
|
|
1; |