diff options
Diffstat (limited to 'contrib/netjail/netjail_start.sh')
-rwxr-xr-x | contrib/netjail/netjail_start.sh | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/netjail/netjail_start.sh b/contrib/netjail/netjail_start.sh new file mode 100755 index 000000000..997ad0a95 --- /dev/null +++ b/contrib/netjail/netjail_start.sh | |||
@@ -0,0 +1,81 @@ | |||
1 | #!/bin/bash | ||
2 | . "$(dirname $0)/netjail_core.sh" | ||
3 | . "$(dirname $0)/topo.sh" | ||
4 | |||
5 | set -eu | ||
6 | set -x | ||
7 | |||
8 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" | ||
9 | |||
10 | filename=$1 | ||
11 | PREFIX=$2 | ||
12 | readfile=$3 | ||
13 | |||
14 | if [ $readfile -eq 0 ] | ||
15 | then | ||
16 | read_topology_string "$filename" | ||
17 | else | ||
18 | echo read file | ||
19 | read_topology $filename | ||
20 | fi | ||
21 | |||
22 | shift 2 | ||
23 | |||
24 | LOCAL_GROUP="192.168.15" | ||
25 | GLOBAL_GROUP="92.68.150" | ||
26 | KNOWN_GROUP="92.68.151" | ||
27 | |||
28 | |||
29 | echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16]" | ||
30 | |||
31 | netjail_bridge | ||
32 | NETWORK_NET=$RESULT | ||
33 | |||
34 | for X in $(seq $KNOWN); do | ||
35 | netjail_node | ||
36 | KNOWN_NODES[$X]=$RESULT | ||
37 | netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16 | ||
38 | KNOWN_LINKS[$X]=$RESULT | ||
39 | done | ||
40 | |||
41 | declare -A NODES | ||
42 | declare -A NODE_LINKS | ||
43 | |||
44 | for N in $(seq $GLOBAL_N); do | ||
45 | netjail_node | ||
46 | ROUTERS[$N]=$RESULT | ||
47 | netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16 | ||
48 | NETWORK_LINKS[$N]=$RESULT | ||
49 | netjail_bridge | ||
50 | ROUTER_NETS[$N]=$RESULT | ||
51 | |||
52 | for M in $(seq $LOCAL_M); do | ||
53 | netjail_node | ||
54 | NODES[$N,$M]=$RESULT | ||
55 | netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24 | ||
56 | NODE_LINKS[$N,$M]=$RESULT | ||
57 | done | ||
58 | |||
59 | ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" | ||
60 | netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24 | ||
61 | ROUTER_LINKS[$N]=$RESULT | ||
62 | |||
63 | netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24 | ||
64 | |||
65 | for M in $(seq $LOCAL_M); do | ||
66 | netjail_node_add_default ${NODES[$N,$M]} $ROUTER_ADDR | ||
67 | done | ||
68 | |||
69 | # TODO Topology configuration must be enhanced to configure forwarding to more than one subnet node via different ports. | ||
70 | |||
71 | if [ "1" == "${R_TCP[$N]}" ] | ||
72 | then | ||
73 | ip netns exec ${ROUTERS[$N]} iptables -t nat -A PREROUTING -p tcp -d $GLOBAL_GROUP.$N --dport 60002 -j DNAT --to $LOCAL_GROUP.1 | ||
74 | ip netns exec ${ROUTERS[$N]} iptables -A FORWARD -d $LOCAL_GROUP.1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
75 | fi | ||
76 | if [ "1" == "${R_UDP[$N]}" ] | ||
77 | then | ||
78 | ip netns exec ${ROUTERS[$N]} iptables -t nat -A PREROUTING -p udp -d $GLOBAL_GROUP.$N --dport 60002 -j DNAT --to $LOCAL_GROUP.1 | ||
79 | ip netns exec ${ROUTERS[$N]} iptables -A FORWARD -d $LOCAL_GROUP.1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
80 | fi | ||
81 | done | ||