こないだ間違って設定飛ばしてしまって困ったので、メモとして残しとく。
環境
- 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
項目 | 設定値 |
---|---|
OpenVPN | Enable |
Start Type | WAN Up |
Config as | Server |
Server mode | Router(TUN) |
Network | お好きなネットワークアドレスを (例:172.31.255.0) |
Netmask | お好きなネットマスクを (例:255.255.255.0) |
Port | 443 (自分の要件的に。デフォルトの1194でもOK。) |
Tunnel Protocol | TCP (自分の要件的に。デフォルトのUDPでもOK。) |
Encryption Cipher | AES-256 CBC |
Hash Algorithm | SHA512 |
Advanced Options | Enable |
TLS Cipher | TLS-DHE-RSA-WITH-AES-256-GCM-SHA384 (クライアント側がバージョンアップして対応できるようになったら、 |
Compression | Compress lz4-v2 |
Redirect default Gateway | Enable |
Allow Client to Client | Disable |
Allow duplicate cn | Disable |
Tunnel MTU setting | 1400 |
Tunnel UDP MSS-Fix | Disable |
Additional Config | push “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
コメント