6 |
use File::Slurp; |
use File::Slurp; |
7 |
|
|
8 |
use server; |
use server; |
9 |
|
use ip; |
10 |
|
|
11 |
sub ifconfig { |
sub ifconfig { |
12 |
my $dev = shift; |
my $dev = shift; |
13 |
`/sbin/ifconfig $dev` |
`/sbin/ifconfig $dev` |
14 |
} |
} |
15 |
|
|
16 |
|
sub setup { |
17 |
|
|
18 |
|
if ( my $dev = $ENV{DEV} ) { |
19 |
|
warn "W: running under device $dev, not configuring network\n"; |
20 |
|
return; |
21 |
|
} |
22 |
|
|
23 |
|
my $ifconfig = ifconfig('virtual'); |
24 |
|
if ( $ifconfig !~ m{UP} ) { |
25 |
|
system "brctl addbr virtual"; |
26 |
|
system "brctl setfd virtual 0"; |
27 |
|
system("/sbin/ifconfig virtual $server::ip netmask $server::netmask") == 0 || warn "W: $!"; |
28 |
|
} else { |
29 |
|
warn "OK $ifconfig\n"; |
30 |
|
} |
31 |
|
if ( my $dev = ip::default_route_dev() ) { |
32 |
|
system "sudo sysctl -w net.ipv4.ip_forward=1"; |
33 |
|
my $network = ip::from_int( ip::to_int($server::ip) & ip::to_int($server::netmask) ); |
34 |
|
warn "# network $network"; |
35 |
|
system "sudo iptables -t nat -L POSTROUTING -n | grep $network || sudo iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE"; |
36 |
|
warn "masquarade to $dev"; |
37 |
|
} |
38 |
|
} |
39 |
|
|
40 |
sub tap { |
sub tap { |
41 |
|
|
42 |
if ( my $dev = $ENV{DEV} ) { |
if ( my $dev = $ENV{DEV} ) { |