wiki:bgp_ip_transit_info
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| wiki:bgp_ip_transit_info [2025/12/18 12:11] – add more info antisa | wiki:bgp_ip_transit_info [2026/05/29 12:56] (current) – [gobgp software example] add info about multiple peer ips and examples antisa | ||
|---|---|---|---|
| Line 34: | Line 34: | ||
| If you only have one location, then you can advertise the whole /32 block. if you have more then 1x location then you can split it to /48s or /40 or /36 etc. so you have large block in each location. | If you only have one location, then you can advertise the whole /32 block. if you have more then 1x location then you can split it to /48s or /40 or /36 etc. so you have large block in each location. | ||
| if you do split it smaller then a /32, then you should create that route object as well to match. | if you do split it smaller then a /32, then you should create that route object as well to match. | ||
| + | |||
| + | ===== gobgp software example ===== | ||
| + | A working BGP session with [[https:// | ||
| + | |||
| + | You need to allow inbound port 179 in the firewall for both v4 and v6. | ||
| + | |||
| + | For IPv6 you need to have that set up on the network interface as well: | ||
| + | |||
| + | < | ||
| + | 2: eth0: < | ||
| + | link/ether a0: | ||
| + | inet 198.44.157.3/ | ||
| + | | ||
| + | inet6 2607: | ||
| + | | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | // | ||
| + | < | ||
| + | [global.config] | ||
| + | as = 203619 | ||
| + | router-id = " | ||
| + | |||
| + | [[neighbors]] | ||
| + | [neighbors.config] | ||
| + | neighbor-address = " | ||
| + | peer-as = 11878 | ||
| + | |||
| + | [[neighbors]] | ||
| + | [neighbors.config] | ||
| + | neighbor-address = " | ||
| + | peer-as = 11878 | ||
| + | |||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | //as// is your assigned ASN number. | ||
| + | |||
| + | // | ||
| + | |||
| + | //peer-as// is peer ASN, also given by provider. | ||
| + | |||
| + | Provider might also give you a // | ||
| + | |||
| + | |||
| + | < | ||
| + | [neighbors.ebgp-multihop.config] | ||
| + | enabled = true | ||
| + | multihop-ttl = 64 | ||
| + | </ | ||
| + | |||
| + | After starting gobgp you should see the session is established: | ||
| + | |||
| + | < | ||
| + | # gobgp neighbor | ||
| + | Peer | ||
| + | 198.44.157.1 | ||
| + | 2607: | ||
| + | </ | ||
| + | // | ||
| + | |||
| + | Check the routing table. You might see something like this | ||
| + | |||
| + | < | ||
| + | # gobgp global rib -a ipv4 | ||
| + | | ||
| + | * 0.0.0.0/ | ||
| + | * 23.234.84.0/ | ||
| + | * 23.234.85.0/ | ||
| + | * 23.234.86.0/ | ||
| + | * 23.234.87.0/ | ||
| + | * 89.124.253.0/ | ||
| + | * 198.44.132.0/ | ||
| + | * 198.44.140.0/ | ||
| + | * 198.44.157.0/ | ||
| + | * 198.54.132.0/ | ||
| + | # gobgp global rib -a ipv6 | ||
| + | | ||
| + | * ::/0 | ||
| + | * 2a03: | ||
| + | |||
| + | </ | ||
| + | |||
| + | or this | ||
| + | |||
| + | <code | download> | ||
| + | # gobgp global rib -a ipv4 | ||
| + | | ||
| + | * 89.124.253.0/ | ||
| + | # gobgp global rib -a ipv6 | ||
| + | | ||
| + | * 2a03: | ||
| + | </ | ||
| + | |||
| + | This should be ok. What you need to check is that you are advertising your IPs you should see something like: | ||
| + | |||
| + | <code | download> | ||
| + | # gobgp neighbor 198.44.157.1 adj-out | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Now you can assing IPs from the subnet you own to the loopback interface. It should work even though its not on the eth0 interface. | ||
| + | |||
| + | < | ||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | | ||
| + | inet 89.124.253.5/ | ||
| + | | ||
| + | inet6 2a03: | ||
| + | | ||
| + | inet6 ::1/128 scope host | ||
| + | | ||
| + | </ | ||
| + | |||
| + | <WRAP center round box 60%> | ||
| + | Sometimes you might get an IP address from the private space from the provider like 10.255.0.2 for your side of the BGP session. You need to add it (via '' | ||
| + | |||
| + | < | ||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | | ||
| + | inet 89.124.253.5/ | ||
| + | | ||
| + | inet6 2a03: | ||
| + | | ||
| + | inet6 ::1/128 scope host | ||
| + | | ||
| + | 2: eth0: < | ||
| + | link/ether 5c: | ||
| + | inet 45.128.135.226/ | ||
| + | | ||
| + | inet 10.255.0.2/ | ||
| + | | ||
| + | ... | ||
| + | |||
| + | # gobgp neighbor | ||
| + | Peer AS Up/Down State | ||
| + | 10.255.0.1 | ||
| + | fd00:136::1 206804 | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Checking propagation ===== | ||
| + | RIPE has BG play tool to check the history of route propagation here https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Here's an example of Tzulo server provider which advertises to multiple upstreams | ||
| + | https:// | ||
| + | |||
| + | https:// | ||
| + | |||
| + | which has multiple arrows pointing to upstreams. | ||
| + | |||
| + | ===== Updating AS path length ===== | ||
| + | When advertising IP from multiple providers, one can have a shorter AS path and take all the traffic for itself. You can adjust the length of the AS path on your side by prepending your AS number 1 or more times to extend the path. | ||
| + | |||
| + | Example using gobgp: | ||
| + | < | ||
| + | [global.config] | ||
| + | ... | ||
| + | [global.apply-policy.config] | ||
| + | export-policy-list = [" | ||
| + | default-import-policy = " | ||
| + | default-export-policy = " | ||
| + | |||
| + | [[neighbors]] | ||
| + | ... | ||
| + | ... | ||
| + | |||
| + | [[policy-definitions]] | ||
| + | name = " | ||
| + | [[policy-definitions.statements]] | ||
| + | name = " | ||
| + | |||
| + | [policy-definitions.statements.actions] | ||
| + | route-disposition = " | ||
| + | |||
| + | # number of times to prepend our asn. This allows for controlling | ||
| + | # the length of th AS path that packet takes so it affects routing | ||
| + | # https:// | ||
| + | [policy-definitions.statements.actions.bgp-actions.set-as-path-prepend] | ||
| + | as = " | ||
| + | repeat-n = 1 | ||
| + | |||
| + | </ | ||
| + | Here we're prepending the path 1 additional time. After restarting the service notice a repeating ASN in //AS_PATH// column | ||
| + | |||
| + | # gobgp neighbor 213.155.129.101 adj-out | ||
| + | | ||
| + | | ||
| + | |||
| + | On RIPE Looking glass this will be shown as | ||
| + | {{: | ||
| + | |||
| + | ===== Withdrawing BGP announcements ===== | ||
| + | In case you need to take the server offline for maintenance and you have a dynamic setup i.e. you yourself is advertising the routes via the BGP daemon on your server, it is sufficient to simply stop the BGP session on your side before the maintenance begins. Once the session is down, the advertisements for will be withdrawn automatically. | ||
| + | |||
| + | After the maintenance is completed, you can start the session again and the prefixes will be re-advertised as before. | ||
| + | |||
| ====== Tested on ====== | ====== Tested on ====== | ||
| - | * | + | * gobgp_version: |
| + | * January 2026. | ||
| ====== See also ====== | ====== See also ====== | ||
| ====== References ====== | ====== References ====== | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
wiki/bgp_ip_transit_info.1766059860.txt.gz · Last modified: by antisa
