ubuntu NetworkManagerにrouteを新たに加える, 2 NICs, 2 routers, port forwarding from 2nd router, VPN routing

2つのルーターが別々のネットワークに繋がっていて場合、1台のPCに2枚のネットワークカードをインストールしそれぞれのネットワークにつなげると、デフォルト・ネットワークでしかポートフォワードが設定できない。

原因=>PCにデフォルト・ルートがNetworkManagerによって設定されているため、ルーター2からネットワーク2を通ってポート・フォワードされたパケットが、PC内のサービスで処理された後、デフォルトルートに捕まって、ネットワーク1(デフォルト)に押し出され、結局、ポートフォワード元のルーター2に戻ってこない。

解決:要するに、ルーター1に来たパケットはルーター1に、2は2にと、ごく当たり前のルーティングにすれば良い。(しかし、多くのOS初期状態は何でもかんでもデフォルトルートへ押し出されてしまう)

困難:要するにrouteコマンドはパケットの行き先だけを調べて、ルーティングしてしまうので、「何処から来たか」まで込めてルーティングするためにはip route/ip ruleコマンドを使う必要がある。

Tips:「pref 32000」でメイン・デフォルトテーブルより前に「ルーター2に来たパケットはルーター2に」というルーティング・テーブルをおいてデフォルトに捕まる前に処理する。

ーーーーーーーーーーーーーーーーーー

まず、/etc/sysctl.conf を設定
net.ipv4.ip_forward=1

保存したらリスタート
sudo sysctl -p


/etc/NetworkManager/dispatcher.d/02-setuproutes(新規に作る)

#!/bin/sh

case $1 in
"eth2")
# eth2
/sbin/ip route add default via 192.168.2.1 table portForwarding2
/sbin/ip rule add from 192.168.2.1 table portForwarding2 pref 32000
;;

"eth3")
# eth3
  #以下NICの数分だけ
;;
esac

02-setuproutesは実行パーミッションに変更して保存。


NetworkManagerを使っていない場合は/etc/network/interfacesに以下を追記

                                                                                                                                                      • -


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
post-up ip route add 192.168.1.0/24 dev eth0 src 192.168.1.2 table portForwarding1
post-up ip route add default via 192.168.1.1 table portForwarding1
post-up ip route append 192.168.1.0/24 dev eth0 src 192.168.1.2
post-up ip rule add from 192.168.1.2 table portForwarding1
post-down ip rule del from 192.168.1.2 table portForwarding1

auto eth1
iface eth1 inet static
address 192.168.2.5
netmask 255.255.255.0
post-up ip route add 192.168.2.0/24 dev eth1 src 192.168.2.5 table portForwarding2
post-up ip route add default via 192.168.2.1 table portForwarding2 protocol 4
post-up ip route append 192.168.2.0/24 dev eth1 src 192.168.2.5
post-up ip rule add from 192.168.2.5 table portForwarding2
post-down ip rule del from 192.168.2.5 table portForwarding2

auto wlan0
iface wlan0 inet static
wireless-essid homewireless
address 19.168.3.4
netmask 255.255.255.0
post-up ip route add 192.168.3.0/24 dev wlan0 src 192.168.3.4 table portForwarding3
post-up ip route add default via 192.168.3.1 table portForwarding3 protocol 4
post-up ip route append 192.168.3.0/24 dev wlan0 src 192.168.3.4
post-up ip rule add from 192.168.3.4 table portForwarding3
post-down ip rule del from 192.168.3.4 table portForwarding3

(※This configuration assumes 3 seperate networks are present. 192.168.1.1, 192.168.2.1, and 192.168.3.1 are all gateways attached to seperate external networks. 192.168.1.2, 192.168.2.5, and 192.168.3.4 are the interface IP addresses. After you make these changes you will need to restart the computer, before using the new configuration. )

※ https://help.ubuntu.com/community/IProuteRoundRobbin より

                                                                                                                                                        • -

$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep

200 portForwarding0 #<-追加

後はシステムリスタート

$ ip rule
0: from all lookup local
32000: from 192.168.2.10 lookup portForwarding2
32766: from all lookup main
32767: from all lookup default