はじめに
Raspberry Pi3+CentOS7の環境にSoftEtherVPNを設定したときの自分用メモです。
192.168.30.40 12:34:56:11:11:11 eth0 (Raspberry Piに元からあるLANポート)
192.168.30.50 ab:cd:ef:22:22:22 eth1 (USB-NIC)
DHCPで固定アドレスを割り当ててます。
問題の発生
WindowsのコマンドプロンプトからARPテーブルを確認したところ、
> arp -a
インターネット アドレス 物理アドレス
192.168.30.40 12-34-56-11-11-11
192.168.30.50 12-34-56-11-11-11
あれ??
異なるIPアドレスに対して同じMACアドレスが割当たってます。
正解は以下の通りです。
192.168.30.40 12-34-56-11-11-11
192.168.30.50 ab-cd-ef-22-22-22
では、ネットワークの設定が正解になるように対応を行います。
eth1で受けた通信をeth0から返信しているため。
//tcpdumpコマンドで確認済です。
//ログは省略。
手順
$cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
100 subroute-eth1 <- 追加
$ ip rule add from 192.168.30.50 table subroute-eth1 prio 100
$ ip route add table subroute-eth1 192.168.30.0/24 dev eth1 scope link proto kernel
$ ip route add table subroute-eth1 default via 192.168.30.1 dev eth1
反映されているか確認します。
$ ip route show table subroute-eth1
default via 192.168.30.1 dev eth1
192.168.30.0/24 dev eth1 proto kernel scope link
$ ip rule
0: from all lookup local
100: from 192.168.30.50 lookup subroute-eth1
32766: from all lookup main
32767: from all lookup default
OSの再起動対応
以下ファイルを作りCentOSの再起動で設定が消えないようにします。
/etc/sysconfig/network-scripts/{rule,route}-eth1
手作業でファイルを作ると間違う可能性があるので、
CentOS7ではnmcliコマンドを使うのを推奨されていますが、
何故か、nmcliコマンドでポリシーベースの設定は出来ないようです(注意、2015年の古い情報です)
https://www.centos.org/forums/viewtopic.php?t=50400
https://mano.xyz/2033/
nmcliコマンドで設定が可能なら誰か教えて欲しい・・・
しかたないので今回は以下のファイルを手作業で作りました。
$ cat /etc/sysconfig/network-scripts/route-eth1
192.168.30.0/24 dev eth1 src 192.168.30.50 table subroute-eth1
default via 192.168.30.1 dev eth1 table subroute-eth1
$ cat /etc/sysconfig/network-scripts/rule-eth1
from 192.168.30.50 table subroute-eth1 priority 100
NetworkManager-config-routing-rulesの起動
CentOS7をMinimalで構築している場合は以下パッケージをインストールして起動します。
$ yum install NetworkManager-config-routing-rules
$ systemctl enable NetworkManager-dispatcher
$ systemctl start NetworkManager-dispatcher
こうしないと /etc/sysconfig/network-scripts/{rule,route}-eth1 の設定がネットワークに反映されません。
NetworkManagerの再起動
$ systemctl restart NetworkManager
再起動後の設定を確認する
$ ip route show table subroute-eth1
default via 192.168.30.1 dev eth1
192.168.30.0/24 dev eth1 scope link src 192.168.30.50
$ ip route
default via 192.168.30.1 dev eth0 proto static metric 100
192.168.30.0/24 dev eth0 proto kernel scope link src 192.168.30.40 metric 100
192.168.30.0/24 dev eth1 proto kernel scope link src 192.168.30.50 metric 101
$ ip rule
0: from all lookup local
100: from 192.168.30.50 lookup subroute-eth1
32766: from all lookup main
32767: from all lookup default
その他
VPN接続はパケット転送をおこなわなくても出来るはずなので無効化しています。
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0