Ubuntu + NIC 2枚刺しで、受信した IF から応答する

  • Ubuntu 14.04
  • NIC が2枚 (以上) 刺さっている
  • それぞれの口がインターネットに出ていける
  • ブロードバンドルータ等のポートフォワード設定により、マシンの特定のポートに対してインターネット側から到達できる

上記のような環境で、受信したインターフェイスから応答する方法のメモ。

手順

rt_tables を編集する。

$ diff -u /etc/iproute2/rt_tables.orig /etc/iproute2/rt_tables
--- /etc/iproute2/rt_tables.orig        2013-11-23 10:10:33.000000000 +0900
+++ /etc/iproute2/rt_tables     2017-02-26 10:56:34.033357000 +0900
@@ -9,3 +9,5 @@
 # local
 #
 #1     inr.ruhep
+100     subroute100
+101     subroute101

インターフェイスの設定をする。

/etc/network/interfaces.d/eth0.cfg:

auto eth0
iface eth0 inet static
        address 172.17.1.2
        netmask 255.255.255.0
        #gateway 172.17.1.1
        dns-nameservers 8.8.8.8 8.8.4.4
        post-up ip route add table 100 172.17.1.0/24 dev eth0 scope link proto kernel
        post-up ip route add table 100 default via 172.17.1.1 dev eth0
        post-up ip route add table main default via 172.17.1.1

このとき、デフォルトゲートウェイgateway ではなく ip route add table main default で指定することに注意。

/etc/network/interfaces.d/eth1.cfg:

auto eth1
iface eth1 inet static
        address 192.168.11.2
        netmask 255.255.255.0
        post-up ip route add table 101 192.168.11.0/24 dev eth1 scope link proto kernel
        post-up ip route add table 101 default via 192.168.11.1 dev eth1
        post-up ip rule add from 192.168.11.2 table 101 prio 10000

以上の設定ができたら、OS を再起動する。

設定確認

$ ip route show
default via 172.17.1.1 dev eth0
172.17.1.0/24 dev eth0  proto kernel  scope link  src 172.17.1.2
192.168.11.0/24 dev eth1  proto kernel  scope link  src 192.168.11.2
$ ip route show table 100
default via 172.17.1.1 dev eth0
172.17.1.0/24 dev eth0  proto kernel  scope link
$ ip route show table 101
default via 192.168.11.1 dev eth1
192.168.11.0/24 dev eth1  proto kernel  scope link
$ ip rule show
0:      from all lookup local
10000:  from 192.168.11.2 lookup subroute101
32766:  from all lookup main
32767:  from all lookup default

参考サイト