Gateways » Historial » Versió 9
Pau Escrich, 18-02-2014 12:59
| 1 | 8 | Pau Escrich | h1. Gateways in bmx6 |
|---|---|---|---|
| 2 | 1 | Pau Escrich | |
| 3 | 3 | Pau Escrich | The gateways of the mesh are those nodes who are able to reach some other networks, such as the Internet or another wireless community,and are used as a door for the nodes of the mesh who cannot reach these networks directly. |
| 4 | 1 | Pau Escrich | |
| 5 | 4 | Pau Escrich | In bmx6 these gateways are reached using IP tunnels between the node who offer the network and the node who wants to fetch the network. |
| 6 | 1 | Pau Escrich | |
| 7 | 7 | Pau Escrich | The list of tunnels can be seen from the web interface (Mesh -> Tunnels) or from the terminal using the command "bmx6 -c --tunnels". |
| 8 | 6 | Pau Escrich | |
| 9 | 2 | Pau Escrich | A node (not gateway) should look for some specific network, as shown in the next */etc/config/bmx6* configuration example: |
| 10 | 1 | Pau Escrich | |
| 11 | 2 | Pau Escrich | <pre> |
| 12 | 1 | Pau Escrich | config 'tunOut' |
| 13 | option 'tunOut' 'ipv6' |
||
| 14 | option 'network' '::/0' |
||
| 15 | |||
| 16 | config 'tunOut' |
||
| 17 | option 'tunOut' 'inet' |
||
| 18 | option 'network' '0.0.0.0/0' |
||
| 19 | option 'maxPrefixLen' '0' |
||
| 20 | |||
| 21 | config 'tunOut' |
||
| 22 | option 'tunOut' 'guifi' |
||
| 23 | option 'network' '10.0.0.0/8' |
||
| 24 | option 'maxPrefixLen' '8' |
||
| 25 | |||
| 26 | config 'tunOut' |
||
| 27 | option 'tunOut' 'cloud' |
||
| 28 | option 'network' '10.0.0.0/8' |
||
| 29 | option 'minPrefixLen' '16' |
||
| 30 | 2 | Pau Escrich | </pre> |
| 31 | 1 | Pau Escrich | |
| 32 | 5 | Pau Escrich | |
| 33 | 2 | Pau Escrich | # *ipv6* Look for all IPv6 announcements |
| 34 | # *inet* Look only for v4 internet 0.0.0.0/0 (and not smaller) |
||
| 35 | # *guifi* Look for the big announcements to other networks, inside the subnetwork 10.0.0.0/8 not smaller than /8 |
||
| 36 | # *cloud* Lookg for all (small) announcements from /16 to /32 inside the subnetwork 10.0.0.0/8 |
||
| 37 | 5 | Pau Escrich | |
| 38 | |||
| 39 | In the mesh network there might be several gateways publishing the same network, in such case the node will choose his best path. |
||
| 40 | There are many options which can be used to modify the path decision, for instance one quite useful is the "gwName". |
||
| 41 | |||
| 42 | <pre> |
||
| 43 | config 'tunOut' |
||
| 44 | 8 | Pau Escrich | option 'tunOut' 'guifi' |
| 45 | option 'network' '10.0.0.0/8' |
||
| 46 | option 'maxPrefixLen' '8' |
||
| 47 | option 'gwName' 'GSmVictoria-RK71' |
||
| 48 | 1 | Pau Escrich | </pre> |
| 49 | |||
| 50 | In this example, if exist a node named "GSmVictoria-RK71" publishing the network 10.0.0.0/8 it will be selected and not the another ones. |
||
| 51 | 8 | Pau Escrich | |
| 52 | h1. Gateways in qMp |
||
| 53 | |||
| 54 | QMP implements an abstraction layer of the bmx6 gateways. It is configured in the file /etc/config/gateways which can look like this (there is also a nice web interface under Configuration->Gateways to manage them): |
||
| 55 | |||
| 56 | <pre> |
||
| 57 | config gateway 'inet6' |
||
| 58 | option type 'search' |
||
| 59 | option network '::/0' |
||
| 60 | option maxPrefixLen '0' |
||
| 61 | option tableRule '32767/253' |
||
| 62 | option ignore '0' |
||
| 63 | |||
| 64 | config gateway 'inet6_offer' |
||
| 65 | option type 'offer' |
||
| 66 | option network '::/0' |
||
| 67 | option ignore '1' |
||
| 68 | |||
| 69 | config gateway 'inet4' |
||
| 70 | option type 'search' |
||
| 71 | option network '0.0.0.0/0' |
||
| 72 | option maxPrefixLen '0' |
||
| 73 | option tableRule '32767/253' |
||
| 74 | option ignore '0' |
||
| 75 | |||
| 76 | config gateway 'inet4_offer' |
||
| 77 | option type 'offer' |
||
| 78 | option network '0.0.0.0/0' |
||
| 79 | option ignore '1' |
||
| 80 | |||
| 81 | config gateway 'cloud' |
||
| 82 | option type 'search' |
||
| 83 | option network '10.0.0.0/8' |
||
| 84 | option minPrefixLen '24' |
||
| 85 | |||
| 86 | config gateway 'cloud6' |
||
| 87 | option type 'search' |
||
| 88 | option network '::/0' |
||
| 89 | option minPrefixLen '48' |
||
| 90 | |||
| 91 | config gateway 'community' |
||
| 92 | option type 'search' |
||
| 93 | option network '10.0.0.0/8' |
||
| 94 | option maxPrefixLen '8' |
||
| 95 | option gwName 'UPCc6-65ab' |
||
| 96 | |||
| 97 | config gateway 'community6' |
||
| 98 | option type 'search' |
||
| 99 | option network '::/0' |
||
| 100 | option minPrefixLen '32' |
||
| 101 | option maxPrefixLen '48' |
||
| 102 | |||
| 103 | config gateway 'community_offer' |
||
| 104 | option type 'offer' |
||
| 105 | option network '10.0.0.0/8' |
||
| 106 | option ignore '1' |
||
| 107 | |||
| 108 | config gateway 'example' |
||
| 109 | option ignore '1' |
||
| 110 | option type 'search' |
||
| 111 | option gwName 'qMp-example' |
||
| 112 | option network '10.1.0.0/16' |
||
| 113 | option address '10.2.2.2/32' |
||
| 114 | option minPrefixLen '16' |
||
| 115 | option maxPrefixLen '24' |
||
| 116 | option hysteresis '20' |
||
| 117 | option bonus '10' |
||
| 118 | option minBandwidth '10000' |
||
| 119 | option exportDistance '10' |
||
| 120 | |||
| 121 | config gateway 'inet4_upc' |
||
| 122 | option type 'search' |
||
| 123 | option network '0.0.0.0/0' |
||
| 124 | option gwName 'UPCc6-alix1c' |
||
| 125 | option maxPrefixLen '0' |
||
| 126 | option bonus '20' |
||
| 127 | 9 | Pau Escrich | </pre> |
| 128 | 8 | Pau Escrich | |
| 129 | h2. More info about qMp gateways (copy&pasted from mailing list) |
||
| 130 | |||
| 131 | To choose the best GW bmx6 consider several things: |
||
| 132 | |||
| 133 | - PathMetric (based on packet losses of the e2e path) |
||
| 134 | - Bandwidth announced |
||
| 135 | - Bonus/Hysteresis/etc... |
||
| 136 | |||
| 137 | If you go to one node via web interface, under Mesh->Tunnels you will |
||
| 138 | find this information. The final calculation is the row named "Tun Metric". |
||
| 139 | |||
| 140 | The Hysteresis defines how good has to be an alternative GW to select it |
||
| 141 | (by default it is 20%). So you can consider this scenario: |
||
| 142 | |||
| 143 | - GW A is the best (TunMetric=100) |
||
| 144 | - GW B is not so good (TunMetric=85) |
||
| 145 | - Node C is looking for a gateway |
||
| 146 | |||
| 147 | So Node C will select GW A because it is better. However in some moment |
||
| 148 | node A reboots because of an electricity problem. Then node C will |
||
| 149 | select GW B because it is the only remaining choice. After 5 minuts GW A |
||
| 150 | comes back, but as the Hysteresis is set tun 20% it won't be selected |
||
| 151 | again until B or C reboot. |
||
| 152 | |||
| 153 | So, this could be your scenario, I don't know. To solve this bmx6 will |
||
| 154 | implement a window time before the hysteresis is taken into account. |
||
| 155 | |||
| 156 | Another typical problem is that two GW are announcing different |
||
| 157 | bandwidth. The bandwidth has a big impact in the TunMetric calculation. |
||
| 158 | In old versions of qMp the default announced BW was 1Mbit/s. But in |
||
| 159 | newer versions it has changed to the bmx6 default which is 100Kbit/s. |
||
| 160 | So it could happen that a node is announcing 1Mbit/s and the other |
||
| 161 | 100Kbit/s, so all nods will select the first one. |
||
| 162 | |||
| 163 | To solve this (actually it was a treated in a long mailing list thread) |
||
| 164 | the best option would be to remove all the bandwidth announcements and |
||
| 165 | leave bmx6 use the default bandwidth announcement (which is 100Kbit/s). |
||
| 166 | So if all GW are announcing the same, bmx6 will take into account only |
||
| 167 | the PathMetric. |
||
| 168 | Enter into the gateways, look into the file /etc/config/gateways and |
||
| 169 | remove all the lines which configures the "bandwidth". |
||
| 170 | |||
| 171 | There is also another solution which consists in setting minBW=0 in the |
||
| 172 | non-GW nodes. This will do that the nodes do not look in the bandwidth |
||
| 173 | announcements of the GW but only in the PathMetric. I'll add this by |
||
| 174 | default in future versions of qMp. |