LoginSignup
0
0

More than 3 years have passed since last update.

Ubuntu/Arch 系(というか非RH系)でのルーター設定のメモ

Last updated at Posted at 2020-05-02

DNSとDHCP

DNSはsystemd-resolvedを使う

NetworkManager がネットワークを管理するデーモンになっている(基本的な設定ファイルは/etc/NetworkManager/NetworkManager.conf)。デフォルトではDNSとして systemd-resolved が使われるのだが、これが DNS 用に53番ポートをバインドしてしまっている。NetworkManagerが利用するDNSサービスをdnsmasqに設定してもいいのだが(それが本来だが)、ここでは敢えてそうしない。

DHCPはdnsmasqを使う

DHCP server としては dnsmasq を利用するのが軽量かつ簡単なのだが、上記の通り systemd-resolved が53番ポートを専有しているので、設定ファイル /etc/dnsmasq.conf でport=0としてDNS機能を切って、もっぱらDHCP daemon として動作させる。

DNSとDHCPのポートを開放する

ローカル側からDNSとDHCPを利用する必要があるので ufw かなんかで

DNS 53
DHCP 67/udp

ufw allow from 192.168.0.0/16 to any port 53

とかして LAN 側に開放する。必要なら(もちろん必要なので)

SSH 22

も開放する。これらのデーモンを

# systemctl enable --now dnsmasq

などとしてブート時に起動するよう設定する。

dnsmasqの設定

/etc/dnsmasq.confで:

dhcp-range=interface:eno1,192.168.1.100,192.168.1.200
dhcp-host=12:34:56:78:90:ab,192.168.1.99
dhcp-option=option:dns-server,1.1.1.1,8.8.8.8

のようにする。

IP Forwarding

デフォルトではLinuxカーネルがIP forwardingを無効にしているので、カーネルパラメータ(/proc/sys/net/ipv4/ip_forward)を設定する。

# sysctl -w net.ipv4.ip_forward=1

ファイアウォール

ufw を使っているならば、/etc/ufw/before.rulesに転送設定を書く。

私の環境では NICが2つ、WAN側(enx...)とLAN側(eno1)がある。openvpn-client@ovpn設定ファイルが起動されていると、OpenVPNはtun0というネットワークデバイスを作り、ルーティングを設定して外部へ出ていこうとするパケットがデフォルトでtun0からNordVPNのゲートウェイを通って出ていくようになる。enx+という表記は enx* な総てのデバイスにマッチする。

*nat
-F
-A POSTROUTING -o enx+ -j MASQUERADE
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

OpenVPN クライアントの設定

/etc/openvpn/client にVPNサーバーの接続情報を書き込んであるovpnファイルを置く。この際に拡張子は.confにすることに注意。たとえば nordvpn.conf のようにする。

# systemctl enable --now openvpn-client@nordvpn

のようにして有効にする。@以下の部分は設定ファイル名に対応する。これで tun0 が作られ、デフォルトゲートウェイが NordVPN のゲートウェイになる。

起動時に認証情報を手入力はできないので、設定ファイルの
auth-user-pass という行を auth-user-pass xxxxx などとし、認証情報を

(your-id@xxxx.org)
(your-password)

として順に書いた2行ファイルをxxxxxという名前で置いておく(この id と pw は NordVPN のマイページからそれ用のものを入手できる)。中身を見られると困ったことになるので、所有権とパーミッションに注意する(きちんと設定していないと動作はもちろんするがopenvpnのログで怒られる)。

経路指定

ある一定の宛先(たとえば133.0.0.0/8)のパケットは tun0 ではなく直接(VPNを通らず)外に出ていくようにしたい。この場合はゲートウェイ(たとえば 133.XXX.YYY.254 がVPNを使わない場合の本来のゲートウェイであるとして)を指定すればいい。

ip rule add table 200 priority 200
ip route add 133.0.0.0/8 via 133.XXX.YYY.254 table 200

ある一定のマシンからのパケットをVPNを通さずに送り出すなら、そのマシンにDHCPで192.168.XXX.0/24などを割り当てて

ip rule add from 192.168.XXX.0/24 table 100
ip route add all via 133.168.XXX.254 table 100

などとする。ルーティングテーブルの番号を普通に名前で指定したいなら/etc/iproute2/rt_tablesに書いて登録しておく。

だが、これらの設定は non-persistent なので、openvpn の conf ファイルに次のように追記し:

nordvpn.conf
script-security 2
up /etc/openvpn/up.sh

up.sh として上のipコマンドなどをスクリプトにしておけば、openvpn 起動時に実行される(スクリプトの最後はexit 0 などにしておかないと openvpn を再起動した際などに既に存在するテーブルを二重に登録しようとしてコケたというような無害なエラーでも再起動に失敗するので注意)。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0