はじめに
Raspberry Pi3+CentOS7の環境にSoftEtherVPNを設定したときの自分用メモです。
なぜNICを2枚差したのか?
SoftetherVPNの公式にはVPN専用のNICを追加した方が良いと書いてあり、言われるがママ素直にRaspberry PiにUSB-NICを1つ追加しました。
3.6 ローカルブリッジ - SoftEther VPN プロジェクト
まあ当然、追加しただけでは正しく動作しないのでネットの情報を鵜呑み参考にしながら設定を行いました。
以下、作業メモです。
Raspberry Piのネットワーク
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
では、ネットワークの設定が正解になるように対応を行います。
対応方法の概要
NICを2枚を差したときに発生するありがちな問題のようで、マルチホーミング設定を行います。
http://d.hatena.ne.jp/hirose31/20120822/1345626743
http://takumicloud.jp/blog/2015/11/30/nw/
http://ibucket.blogspot.jp/2010/07/centos.html
手順
$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接続
SoftEtherの設定、サービス起動(systemctlコマンド)とファイヤウォールの設定(firewall-cmd)を行って、Android端末からVPN接続出来ることを確認できました。
めでたしめでたし
最後に
CentOSはWindowsと比べるとネットワークを細かく制御できる分めんどうですね。
少しずつ勉強します、めでたしめでたし、
と終わりたいところですが、
OSを再起するとNICを認識する順序によってVPN接続できなくなります、ググるとCentOS界隈ではよくある現象でNICの名前(ifcgf-eth0, ifcfg-eth1)を固定する設定が必要になります。
おいおい初見殺しだな
(参考)
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/appe-Consistent_Network_Device_Naming
RHEL7のNICのネーミングルール - めもめも
mrwk update: systemd-udevdによるNIC命名とbiosdevnameがまざって混乱する件
CentOS7におけるNIC命名ルール - 雑木林