dd-wrtでOpenVPN (13)
その後本運用を開始して不具合対応や要望対応するなかで変更をしたのだが、めんどくさくなってブログの更新をしていない。
記憶による変更点:
- クライアントによってやれることに制限をするため、クライアント別コンフィグ(/tmp/openvpn/ccd)に設定する。接続時にpushする経路(routing)を変える、付与するIPアドレスを特定する
- iptablesを細工して特定クライアントから接続できる先を限定的に増やす
- リモートアクセスで使う帯域を制限
- 外部のマシンから定期的に接続、内側へpingして正常性確認、障害時メール通知
友人のアクセス用に始めたことではあったが自分でも家庭内LANにあるマシンやデータにアクセスできるようになってこれは便利。
dd-wrtでOpenVPN (12)
Windows XP からの接続
出来上がったOpenVPNサーバにWindows XPから接続したい。
そもそもウチの中のあるネットワークセグメントに友人のサーバを設置して、そこへリモートアクセスしたいというのが目的なのだが、アクセス元がXPだということで。自分のマシンではないし事情があってXPを使っているので、希望はかなえる必要がある。XPそのもの、OpenVPNクライアントいずれにもセキュリティの問題があるが、その辺は別途対応する。
- OpenVPN for Windows GUIの最新版(2.5.x)はXPに対応していないので、古いバージョン(2.3.x)を使う必要がある。
- OpenVPN for Windows GUI 2.3.x版は公式サイトのダウンロードには載っていない。古いバージョンを掲載しているサイトを探してダウンロードする。
- OpenVPN for Windows GUI 2.3.x版の設定ファイルを作るが、現行のキーワードやサイファーで対応していないものがあるので変更が必要。
proto udp4 > udp
data-cipher > 指定できない
cipher: AES-256-CBC --> AES-128-CBC
Auth: SHA256 --> SHA1
- OpenVPNサーバ側の設定も変える。
Cipher: AES-256-CBC --> AES-128-CBC
Hash Algorithm: SHA256 --> SHA1
(まだ書くことありそうな)
dd-wrtでOpenVPN (11)
dd-wrtでOpenVPN (10)
下記を参考に変更、大きなパケットでも通るようになった。
https://vogel.at.webry.info/201504/article_10.html
サーバ(dd-wrt)側
項目 | 値 |
---|---|
Tunnel MTU setting | 1400 |
Tunnel UDP Fragment | 1280 |
Tunnel UDP MSS-Fix/td> | Enable |
クライアント(Ubuntu)側
項目 | 値 |
---|---|
Use custom tunnel Maximum Transmission Unit (MTU) | 1400 |
Use custom UDP fragment size | 1280 |
Restrict tunnel TCP Maximum Segment Size (MSS) | y |
結果
$ ping 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=2.95 ms
64 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=2.52 ms
^C
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.525/2.737/2.950/0.218 ms
$ ping -s 1300 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 1300(1328) bytes of data.
1308 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=2.73 ms
1308 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=3.09 ms
^C
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 2.739/2.916/3.093/0.177 ms
$ ping -s 1400 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 1400(1428) bytes of data.
1408 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=3.53 ms
1408 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=3.18 ms
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 3.183/3.361/3.539/0.178 ms
$ ping -s 1500 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 1500(1528) bytes of data.
1508 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=3.58 ms
1508 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=3.39 ms
1508 bytes from 10.10.1.1: icmp_seq=3 ttl=64 time=3.13 ms
1508 bytes from 10.10.1.1: icmp_seq=4 ttl=64 time=3.65 ms
^C
--- 10.10.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 3.137/3.441/3.652/0.198 ms
$ ping -s 2000 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 2000(2028) bytes of data.
2008 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=3.46 ms
2008 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=7.05 ms
^C
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.460/5.255/7.050/1.795 ms
$ ping -M do -s 2000 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 2000(2028) bytes of data.
ping: local error: Message too long, mtu=1400
ping: local error: Message too long, mtu=1400
ping: local error: Message too long, mtu=1400
^C
--- 10.10.1.1 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2032ms
$ ping -M dont -s 2000 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 2000(2028) bytes of data.
2008 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=4.00 ms
2008 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=4.46 ms
^C
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 4.003/4.232/4.462/0.238 ms
(とりあえず了) (つづく)
dd-wrtでOpenVPN (9)
sshログインができず調べていくと297byteまでしか通らないことがわかり、試行錯誤して変更。1374 bytesまでは通るようになった。ssh loginもできる。
サーバ(dd-wrt)側変更点
項目 | 値 |
---|---|
Advanced Option | Enable |
Compression | Yes |
Redirect default Gateway | Disable |
Allow Client to Client | Disable |
Allow duplicate Clients | Disable |
Tunnel MTU setting | 1500 |
Tunnel UDP Fragment | (blank) |
Tunnel UDP MSS-Fix | Disable |
Use ECDH instead of DH.PEM | Disable |
クライアント側変更点
項目 | 値 |
---|---|
Use LZO data compression | y |
Use custom tunnel maximum Transmission Unit(MTU) | 1500 |
これで1374byte (1402byte)までのパケットは通過するが、1375byte (1403byte)以上はロストする。ファイル転送で失敗しそうな。
$ ping -s 1375 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 1375(1403) bytes of data.
^C
--- 10.10.1.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
$ ping -s 1374 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 1374(1402) bytes of data.
1382 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=2.78 ms
1382 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=2.27 ms
^C
--- 10.10.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 2.275/2.530/2.785/0.255 ms
(つづく)
dd-wrtでOpenVPN (8)
用途としてLAN内にリモートアクセスすることだけを考えていて、デフォルトルートを入れたくない。
dd-wrtのLAN側ネットワークへの経路をプッシュする
OpenVPN - Advanced Options [x] Enable
Additional Config:
push "route 192.168.131.0 255.255.255.0 vpn_gateway"
項目 | 値 |
---|---|
Redirect default Gateway | Disable |
dd-wrt上のログ:
... 20210227 23:22:10 client1/192.168.129.58:54979 PUSH: Received control message: 'PUSH_REQUEST'
20210227 23:22:10 client1/192.168.129.58:54979 SENT CONTROL [client1]: 'PUSH_REPLY route 192.168.131.0 255.255.255.0 vpn_gateway route-gateway 10.10.1.1 topology subnet ping 10 ping-restart 120 ifconfig 10.10.1.2 255.255.255.0 peer-id 0' (status=1)
クライアント側のルーティングテーブル
kenhrd@ubuntu:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.10.1.1 0.0.0.0 UG 50 0 0 tun0
default 192.168.129.254 0.0.0.0 UG 100 0 0 ens33
10.10.1.0 * 255.255.255.0 U 50 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 ens33
192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0
192.168.129.0 * 255.255.255.0 U 100 0 0 ens33
192.168.131.0 10.10.1.1 255.255.255.0 UG 50 0 0 tun0
pushした経路が乗るのはいいがdefaultが出るのはおかしい ... クライアント側の設定だった(cf https://askubuntu.com/questions/254031/change-openvpn-clients-default-route)
You can fix that behaviour by editing the VPN connection and on the IPv4 settings tab select the 'Routes...' button. You'll see an option called 'Use this connection only for resources on this network'. Make sure that's enabled and then restart your VPN. That should sort you out.
設定したところでUbuntuのルーティング
kenhrd@ubuntu:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.129.254 0.0.0.0 UG 100 0 0 ens33
10.10.1.0 0.0.0.0 255.255.255.0 U 50 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.129.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.131.0 10.10.1.1 255.255.255.0 UG 50 0 0 tun0
(つづく)
dd-wrtでOpenVPN (7)
テスト
UbuntuのGUIでOpenVPNをONにするとつながった。
クライアント側
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 tun0
0.0.0.0 192.168.129.254 0.0.0.0 UG 100 0 0 ens33
10.10.1.0 0.0.0.0 255.255.255.0 U 50 0 0 tun0
10.147.19.0 0.0.0.0 255.255.255.0 U 0 0 0 zt7nnolz6z
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.129.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
$ ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.1.2 P-t-P:10.10.1.2 Mask:255.255.255.0
inet6 addr: fe80::61da:e5df:63a4:eb17/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:781 errors:0 dropped:0 overruns:0 frame:0
TX packets:815 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:682887 (682.8 KB) TX bytes:56848 (56.8 KB)
$ ping 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=5.56 ms
64 bytes from 10.10.1.1: icmp_seq=2 ttl=64 time=4.60 ms
64 bytes from 10.10.1.1: icmp_seq=3 ttl=64 time=2.87 ms
^C
--- 10.10.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 2.879/4.348/5.562/1.111 ms
root@DD-WRT:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.129.254 0.0.0.0 UG 0 0 0 eth2
10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tun2
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
192.168.129.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.131.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
root@DD-WRT:~# ifconfig tun2
tun2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.1.1 P-t-P:10.10.1.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:743 errors:0 dropped:0 overruns:0 frame:0
TX packets:749 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:52757 (51.5 KiB) TX bytes:680260 (664.3 KiB)
PING 10.10.1.2 (10.10.1.2): 56 data bytes
64 bytes from 10.10.1.2: seq=0 ttl=64 time=1.924 ms
64 bytes from 10.10.1.2: seq=1 ttl=64 time=3.034 ms
^C
--- 10.10.1.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 1.924/2.479/3.034 ms
これで完成と喜んではいけない。テストしていくとまだ不具合がある。
(つづく)