Changes between Initial Version and Version 1 of TipAndDoc/VM/network/iproute


Ignore:
Timestamp:
Jun 26, 2009 11:30:37 PM (15 years ago)
Author:
mitty
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TipAndDoc/VM/network/iproute

    v1 v1  
     1[[PageOutline]] 
     2 
     3 = iproute2 = 
     4 * see wiki:TipAndDoc/network/iproute 
     5 
     6 * [../#networkmap] のネットワークを使用 
     7 
     8 = centos-inner = 
     9 * パケットの往路と復路が異なってしまう問題への対応 
     10   * see [../route#imperfect] 
     11 
     12 == 設定前 == 
     13 * centos-inner ~]$ route 
     14{{{ 
     15Kernel IP routing table 
     16Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
     17192.168.50.0    *               255.255.255.0   U     0      0        0 eth0 
     1810.2.0.0        *               255.255.0.0     U     0      0        0 eth2 
     1910.0.0.0        10.1.0.254      255.255.0.0     UG    0      0        0 eth1 
     2010.1.0.0        *               255.255.0.0     U     0      0        0 eth1 
     21169.254.0.0     *               255.255.0.0     U     0      0        0 eth2 
     22default         192.168.50.1    0.0.0.0         UG    0      0        0 eth0 
     23}}} 
     24   * 10.0.0.0/16のルートについては設定済み 
     25 
     26 * centos-inner ~]$ ip route 
     27{{{ 
     28192.168.50.0/24 dev eth0  proto kernel  scope link  src 192.168.50.110 
     2910.2.0.0/16 dev eth2  proto kernel  scope link  src 10.2.0.110 
     3010.0.0.0/16 via 10.1.0.254 dev eth1 
     3110.1.0.0/16 dev eth1  proto kernel  scope link  src 10.1.0.110 
     32169.254.0.0/16 dev eth2  scope link 
     33default via 192.168.50.1 dev eth0 
     34}}} 
     35   * centos-inner ~]$ ip route show dev eth0 
     36{{{ 
     37192.168.50.0/24  proto kernel  scope link  src 192.168.50.110 
     38default via 192.168.50.1 
     39}}} 
     40   * centos-inner ~]$ ip route show dev eth1 
     41{{{ 
     4210.0.0.0/16 via 10.1.0.254 
     4310.1.0.0/16  proto kernel  scope link  src 10.1.0.110 
     44}}} 
     45   * centos-inner ~]$ ip route show dev eth2 
     46{{{ 
     4710.2.0.0/16  proto kernel  scope link  src 10.2.0.110 
     48169.254.0.0/16  scope link 
     49}}} 
     50 
     51 * centos-inner ~]$ ip rule 
     52{{{ 
     530:      from all lookup 255 
     5432766:  from all lookup main 
     5532767:  from all lookup default 
     56}}} 
     57 
     58 * centos-outer <=(router)=> centos-inner 
     59 * centos-outer ~]$ ping 10.2.0.110 -c 1 
     60   1. centos-outer:eth1 
     61   1. ubuntu-router:eth0 
     62   1. ubuntu-router:eth2 
     63{{{ 
     6417:18:03.739868 IP 10.0.0.20 > 10.2.0.110: ICMP echo request, id 31500, seq 1, length 64 
     65}}} 
     66   1. centos-inner:eth2 
     67{{{ 
     6817:18:03.794897 IP 10.0.0.20 > 10.2.0.110: ICMP echo request, id 31500, seq 1, length 64 
     69}}} 
     70   1. centos-inner:eth1 
     71{{{ 
     7217:18:03.795150 IP 10.2.0.110 > 10.0.0.20: ICMP echo reply, id 31500, seq 1, length 64 
     73}}} 
     74   1. ubuntu-router:eth1 
     75{{{ 
     7617:18:03.741063 IP 10.2.0.110 > 10.0.0.20: ICMP echo reply, id 31500, seq 1, length 64 
     77}}} 
     78   1. ubuntu-router:eth0 
     79   1. centos-outer:eth1 
     80 
     81 == 設定 == 
     82 * routing table 設定 
     83   1. centos-inner ~]$ sudo ip route add default via 10.1.0.254 table 1 
     84   1. centos-inner ~]$ sudo ip route add default via 10.2.0.254 table 2 
     85 * routing policy 設定 
     86   1. centos-inner ~]$ sudo ip rule add from 10.1.0.110 table 1 prio 1 
     87   1. centos-inner ~]$ sudo ip rule add from 10.2.0.110 table 2 prio 2 
     88 
     89 * routing policy に関しては、centos-innerはeth1とeth2でネットワークが分かれているので以下のような設定でも良い 
     90   1. centos-inner ~]$ sudo ip rule add from 10.1.0.0/16 table 1 prio 1 
     91   1. centos-inner ~]$ sudo ip rule add from 10.2.0.0/16 table 2 prio 2 
     92   * centos-inner ~]$ ip rule 
     93{{{ 
     940:      from all lookup 255 
     951:      from 10.1.0.0/16 lookup 1 
     962:      from 10.2.0.0/16 lookup 2 
     9732766:  from all lookup main 
     9832767:  from all lookup default 
     99}}} 
     100 
     101 === 反映 === 
     102 * ip route list table main 
     103{{{ 
     104192.168.50.0/24 dev eth0  proto kernel  scope link  src 192.168.50.110 
     10510.2.0.0/16 dev eth2  proto kernel  scope link  src 10.2.0.110 
     10610.0.0.0/16 via 10.1.0.254 dev eth1 
     10710.1.0.0/16 dev eth1  proto kernel  scope link  src 10.1.0.110 
     108169.254.0.0/16 dev eth2  scope link 
     109default via 192.168.50.1 dev eth0 
     110}}} 
     111   * main(default)のtableには変化無し 
     112 * ip route list table 1 
     113{{{ 
     114default via 10.1.0.254 dev eth1 
     115}}} 
     116 * ip route list table 2 
     117{{{ 
     118default via 10.2.0.254 dev eth2 
     119}}} 
     120 * ip rule 
     121{{{ 
     1220:      from all lookup 255 
     1231:      from 10.1.0.110 lookup 1 
     1242:      from 10.2.0.110 lookup 2 
     12532766:  from all lookup main 
     12632767:  from all lookup default 
     127}}} 
     128 
     129 == 結果 == 
     130 * eth1(10.1.0.110)に入ってきたパケットはeth1から、eth2(10.2.0.110)に入ってきたパケットはeth2から送出されるようになる。 
     131 
     132 * centos-outer ~]$ ping 10.2.0.110 -c 1 
     133   1. centos-outer:eth1 
     134   1. ubuntu-router:eth0 
     135   1. ubuntu-router:eth2 
     136{{{ 
     13717:09:25.667375 IP 10.0.0.20 > 10.2.0.110: ICMP echo request, id 22028, seq 1, length 64 
     13817:09:25.668310 IP 10.2.0.110 > 10.0.0.20: ICMP echo reply, id 22028, seq 1, length 64 
     139}}} 
     140   1. centos-inner:eth2 
     141{{{ 
     14217:09:25.682422 IP 10.0.0.20 > 10.2.0.110: ICMP echo request, id 22028, seq 1, length 64 
     14317:09:25.682547 IP 10.2.0.110 > 10.0.0.20: ICMP echo reply, id 22028, seq 1, length 64 
     144}}} 
     145 
     146 * centos-outer ~]$ ping 10.1.0.110 -c 1 
     147   1. centos-outer:eth1 
     148   1. ubuntu-router:eth0 
     149   1. ubuntu-router:eth1 
     150{{{ 
     15117:12:29.065247 IP 10.0.0.20 > 10.1.0.110: ICMP echo request, id 25356, seq 1, length 64 
     15217:12:29.075733 IP 10.1.0.110 > 10.0.0.20: ICMP echo reply, id 25356, seq 1, length 64 
     153}}} 
     154   1. centos-inner:eth1 
     155{{{ 
     15617:12:29.111101 IP 10.0.0.20 > 10.1.0.110: ICMP echo request, id 25356, seq 1, length 64 
     15717:12:29.116137 IP 10.1.0.110 > 10.0.0.20: ICMP echo reply, id 25356, seq 1, length 64 
     158}}} 
     159 
     160 = 補足 = 
     161 * ルールを削除する場合は、table あるいは priority を指定して削除する 
     162{{{ 
     1630:      from all lookup 255 
     1641:      from 10.1.0.110 lookup 1 
     1652:      from 10.2.0.110 lookup 2 
     16632766:  from all lookup main 
     16732767:  from all lookup default 
     168}}} 
     169   * sudo ip rule del table 1 
     170   * sudo ip rule del prio 1 
     171 
     172 * priority は現在のところ省略可能 
     173   * sudo ip rule add from 10.1.0.110 table 1 
     174   * ip rule 
     175{{{ 
     1760:      from all lookup 255 
     17732765:  from 10.1.0.110 lookup 1 
     17832766:  from all lookup main 
     17932767:  from all lookup default 
     180}}} 
     181 * attachment:ip-cref.pdf:wiki:TipAndDoc/network/iproute p.38 
     182 
     183  Really, for historical reasons '''ip rule add''' does not require a priority value and 
     184  allows them to be non-unique. If the user does not supplied a priority, it is selected 
     185  by the kernel. If the user creates a rule with a priority value that already exists, the 
     186  kernel does not reject the request. It adds the new rule before all old rules of the same 
     187  priority. 
     188  It is mistake in design, no more. And it will be fixed one day, so do not rely on this 
     189  feature. Use explicit priorities. 
     190 
     191 * prio(priorityの省略形)の代わりに、preferも使える模様 
     192   * sudo ip rule add from 10.1.0.110 table 1 prefer 1 
     193   * ip rule 
     194{{{ 
     1950:      from all lookup 255 
     1961:      from 10.1.0.110 lookup 1 
     19732766:  from all lookup main 
     19832767:  from all lookup default 
     199}}} 
     200[mitty@centos-inner ~]$  
     201[mitty@centos-inner ~]$ ip rule 
     2020:      from all lookup 255 
     20332766:  from all lookup main 
     20432767:  from all lookup default 
     205 
     206 * routing table はキャッシュされるので、すぐに反映されない場合がある 
     207   * cacheの確認 => ip route show cache 
     208   * cacheの破棄 => sudo ip route flush cache 
     209 
     210 * attachment:ip-cref.pdf:wiki:TipAndDoc/network/iproute p.38 
     211 
     212  Warning: Changes to the RPDB made with these commands do not become active 
     213  immediately. It is assumed that after a script finishes a batch of updates, it flushes 
     214  the routing cache with '''ip route flush cache'''.