OpenVPN on DD-WRTの設定

こないだ間違って設定飛ばしてしまって困ったので、メモとして残しとく。

環境

  • Firmware: DD-WRT v3.0-r41586 std (11/21/19)

設定に際しての要件

  • 公衆WiFiとかでフィルタリングされにくいように443/tcpで接続する
  • VPN経由で自宅LANに接続できるようにする
  • VPN経由でインターネットに接続できるようにする

クライアント側

色んな所で説明されているので省略

サーバ(DD-WRTルータ側)

事前にSSL認証用の鍵ファイルとかちゃんと作成して登録しとくこと。必要なのは

  • Public Server Cert
  • CA Cert
  • Private Server Key
  • DH PEM
  • TLS Key

Services>Services

DnsmasqのAdditional Dnsmasq Optionsに以下の内容を設定。
これをしないとOpenVPNで接続後に、DD-WRTのDnsmasqを使った名前解決ができない。

interface=tun2
no-dhcp-interface=tun2

Services>VPN

項目設定値
OpenVPNEnable
Start TypeWAN Up
Config asServer
Server modeRouter(TUN)
Networkお好きなネットワークアドレスを
(例:172.31.255.0)
Netmaskお好きなネットマスクを
(例:255.255.255.0)
Port443
(自分の要件的に。デフォルトの1194でもOK。)
Tunnel ProtocolTCP
(自分の要件的に。デフォルトのUDPでもOK。)
Encryption CipherAES-256 CBC
Hash AlgorithmSHA512
Advanced OptionsEnable
TLS CipherTLS-DHE-RSA-WITH-AES-256-GCM-SHA384

(クライアント側がバージョンアップして対応できるようになったら、
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384にするかも)

CompressionCompress lz4-v2
Redirect default GatewayEnable
Allow Client to ClientDisable
Allow duplicate cnDisable
Tunnel MTU setting1400
Tunnel UDP MSS-FixDisable
Additional Configpush “route {ルータのLAN側NWアドレス} {ルータのLAN側ネットマスク}”
push “dhcp-option DNS {Networkの最初のホストアドレス(例のとおりだと172.31.255.1)}”
push “compress lz4-v2”

Administration>Command

以下の2行をCommandsフィールドに入れて、「Save Firewall」する。

WAN_IF="$(route -n | awk '/^0.0.0.0/{wif=$NF} END {print wif}')"
iptables -t nat -A POSTROUTING -s {OpenVPN Networkの値}/{OpenVPN Netmaskの値} -o $WAN_IF -j MASQUERADE

ノウハウ

  • DD-WRTのiptables設定は /tmp/.iptに入ってる。
  • DD-WRTのOpenVPN設定ファイルは /tmp/openvpn/openvpn.conf
  • DD-WRTのOpenVPN設定は、デフォルトで tun2 インターフェースを使用するようになっている。なので、Additional Config で「dev tun0 」とかする必要はなく、 tun2 に対しての設定を行えばよい。(といっても必要なファイアウォールルールはDD-WRTが勝手にtun2 に対してやってくれるみたいだけど)
  • 現在のiptablesの情報を細かく見たければ iptables -L -n -v --line-number するとよい
  • DD-WRTが勝手にファイアウォールルールを適度に調整してくれるみたいなので、ネットに転がってる以下のようなAdministration>Commandsの設定はやる必要はない。( /tmp/.ipt で確認済み)
    # 指定したポートあての接続許可
    iptables -I INPUT 1 --dport 443 -j ACCEPT
    
    # VPN接続クライアントからの接続、および転送の許可
    iptables -I INPUT 1 -i tun2 -s {VPN側NW} -j ACCEPT
    iptables -I FORWARD 1 -i tun2 -s {VPN側NW} -j ACCEPT
    
    # br0(DD-WRTのLAN側インターフェース)でのマスカレード
    iptables -t nat -I POSTROUTING 1 -o br0 -s {VPN側NW} -j MASQUARADE
  • すでに「Redirect default Gateway:Enable」しているので、ネットに転がっている以下の設定をAdditional Configに入れる必要はない( /tmp/openvpn/openvpn.conf で確認済み)
    push "redirect-gateway def1

コメント

タイトルとURLをコピーしました