OpenVPN

Arch LinuxのVPSにVPN serverを構築して、VPN Proxyを自前でつくった。
SoftEtherも構築が簡単そうで、スループットも期待できそうだが、pacmanで管理できないパッケージは、Arch Linuxらしくないと考えてあきらめた。
公式 Arch リポジトリにあるVPNのパッケージは、OpenVPNとStrongSwanしかないので、資料がそろっているOpenVPNを選択した。
pacman -S openvpn easy-rsa
本来は、別に認証局が必要だが、easy-rsaを使って、サーバで一気に作成。
パスフレーズは入力が必要だが、Common Nameの入力はENTERで省略できる。
cd /etc/easy-rsa
easyrsa init-pki
easyrsa biuild-ca
easyrsa gen-dh
openvpn –genkey –secret ./pki/ta.key
easyrsa build-server-full server nopass
easyrsa build-client-full client nopass

後は作成したファイルをサーバとクライアントのディレクトリにコピー。
また、サーバの設定ファイルもコピーする。
mv pki/dh.pem pki/dh2048.pem
cp ca.crt ta.key dh.pem private/server.key issued/server.crt /etc/openvpn/server
cp ca.crt ta.key private/client.key issued/client.crt /etc/openvpn/client

設定ファイルをルーティング方式に設定して、起動設定。

cd /etc/openvpn/server
cp /usr/share/openvpn/examples/server.conf ./srv.conf
vi srv.conf
systemctl start openvpn-server@srv
systemctl enable openvpn-server@srv

/etc/open/vpn/server/srv.confの設定例

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0 # This file is secret
comp-lzo adaptive
push “comp-lzo yes”
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/status.log
log /var/log/openvpn/vpn.log
verb 4
mute 20
explicit-exit-notify 1

/etc/iptables/iptables.rulesの設定に以下を加える。
iptables -A INPUT -p udp -m udp –dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -t nat -A INPUT -p udp -m udp –dport 1194 -j ACCEPT

systemctl reload iptables
これで、サーバの設定は終了。

andoroidのクライアントは、OpenVPN ConnectをPlayストアからインストール。
その後は、証明書と鍵をインラインで記載したoovpnファイルを読み込ませて接続できる。
ovpn fileの例
インライン作成は,, , , のタグで囲む。
tls-authディレクティブの代わりに,key-direction 1を記載する。

client
dev tun
proto udp
remote domain.name.com 1194

resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verb 3
#tls-auth
key-direction 1
mute 10

—–BEGIN CERTIFICATE—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END CERTIFICATE—–

—–BEGIN CERTIFICATE—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END CERTIFICATE—–

—–BEGIN PRIVATE KEY—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END PRIVATE KEY—–

—–BEGIN OpenVPN Static key V1—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END OpenVPN Static key V1—–

これでよいのだが、注意として,Chromeのdata savingオプションはオフにしておくこと。
そうしないと、IPがgoogle USAのIPに固定されてしまうので,VPN proxyの意味がない。
また,Playストアのregion情報は起動時しないと更新されないようなので,
VPNを接続した後に,設定!アプリで、Playストアを一度Force stopしてから、再起動する。

暗号のdefaultはbf-cbcで非推奨だが、接続後にaes-256-gcmにアップグレードされる。
# openvpn -show-ciphers

statusとlogは、標準の/etc/openvpn/severから、/var/log/openvpnに移す。ファイル名は、systemd-escapeで、エスケープ処理されているようなので、/の代わりに-が使用できる。

android clientでは、fragment未サポート

2019/10/13
標準の1194 udpの場合、中国から繋がりにくい。TLS errorが起こっているので、great firewallの影響か。ポートを変更したら改善した。

中国の壁

google検索が使えない。google地図はマップデータが不正確なので、諦めるしかない。google keepは使えるが、当然オフラインになる。

wikipediaが使えないのが、予想外に不便。yahooの記事は読めても、Instagramが見れないので、写真が豆腐。

fc2のブログも読めない。
何故かSBI証券に繋がらないことがある。
m3.comに繋がらない。
セディナカード、cdeyna.co.jpもだめ。

ConohaもGMOクラウドのサイトも繋がらない。

Altusのipもブロックされた。

google翻訳が使えるのは助かる。

SoftEther

copy link address

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.30-9696-beta/softether-vpnserver-v4.30-9696-beta-2019.07.08-linux-x64-64bit.tar.gz

tar zxvf

cd vpnserver

vpncmd, 3, check

vpnserver start

vpncmd, 1

softetherを物理デバイスとローカルブリッジすると、vpn経由で物理デバイスのipにアクセスできないので、サーバー自体にアクセスできないらしい。そのため、仮想デバイスとローカルブリッジした上で、仮想ブリッジで物理デバイスとブリッジする。

bridge-utils

Conohaの引越

conoha VPSのipがブロックされたので、ip変更。
サーバーを強制終了して、イメージ保存。
イメージが利用可能になるまで待って、ダーバー追加で、イメージを選択。rootパスワードを設定するだけ。
起動したら、元のサーバーを削除。
イメージの削除方法がわからないが、50GBまでは無料のようだ。

GMO Altusも突然ipブロック。ipを取得し直したが改善しない。ドメイン全体がブロックされたようだ。どうしましょう?

upgrade ubuntu 16.04 to 18.04

Altus Basciで準備されているubuntuのテンプレートは16.04LTSまでしかない。
18.04LTSを試すために、アップグレード
apt update
apt upgrade
apt autoremove
apt full-upgrade してもなにも起こらない。
do-release-upgrade -dを実行
-dオプションをつけていないと、LTSなのにアップグレードできない。
SSH接続のままでも、問題なく、アップグレードできた。
途中いくつかの質問があるが、defaultではなく、installを選択した。
最後に、再起動して無事終了。

2019/10/4
仮想サーバを再作成したら、アップグレードの表示があった。
# apt update
# apt upgrade
# reboot
# do-releae-upgrade

簡単と思ったらアップグレードに失敗。どうしましょう?

iptables

Conohaは、コントロールパネルに接続許可ポートが設定できるので、iptablesの設定をサボっていたが、必要に迫られて設定する。
基本インストールで、iptablesパッケージは設定されているので、ルールを設定して、サービスを起動するだけ。
cd /etc/iptables
cp simple_firewall.rules iptables.rules
systemctl start iptables
systemctl status iptables
iptables -L
systemctl enable iptables
vi iptables.rules
systemctl reload iptables

確認は、nmapでおこなうとよいが、localhostからのアクセスはオープンにしていることが多いので、外部からの状態の確認は、https://www.cman.jp/network/support/port.htmlなどの外部サービスを利用するしかない。
また、DHCPサーバーサービスの確認は、-sUのオプションが必要。
pacman -S nmap
nmap localhost ; scan tcp only
nmap -sU localhost; scan udp only

# ss -atunp; 使用中のtcpとutpポートを数字でプロセス名と表示
# pacman -S lsof; lsof -i -n -P; 使用中のプロセスを表示
これらで、不要なサービスを止める。

ubuntuの小技

最近は、apt-getではなくて、aptなのね。Debian管理者ハンドブックによると、もっとも推奨されるのはaptとのことだ。
でも、apt list –installedとかすると、apt does not have a stabel CLI interfaceと警告が出る。
# apt update
# apt upgrade
# apt autoremove
# apt autoclean
リリースの表示は、/etc/lsb-releaseを見てもよい。
ハイフンとアンダーバーがややこしい。
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
# cat /etc/debian_version
stretch/sid
# apt install nginx
# ufw app list
# systemctl start nginx
# systemctl status nginx
再インストール
# apt install nginx –reinstall
インストール済みパッケージの確認
# apt list –installed | grep -i nginx

再インストールで設定ファイルも含めて初期化するためには、パッケージをpurgeしておく必要があるが、autoremoveでもpurgeしておかないといけない。
# apt purge asterisk
# apt autoremove –purge
# apt install asterisk

タイムゾーンの変更
# dpkg-reconfigure tzdata

DNSサーバの問い合わせ、hostやdigを使うため。
Arch linuxなら、bind-toolsなのだが。
# apt install dnsutils
ドメインの情報には、whoisの方が便利。

ハイフンで始まるファイル名の削除
# rm -i — -bad_name

Woody時代

http://smalle.fc2web.com/
はじめに
YahooBBから,MEGA EGG(メガエッグ)に乗り換え,回線が高速化したので,高速ルータがほしくなりましたが,共有ディスクも必要だし,,,,
いままでは,Windows2000のインターネット共有でがんばっていましたが,夏になり?暴走することが頻発し,ついにLINUXサーバを建てることにしました。
SLS以来のLinuxとなり,ORCAも考え,Debianに決めました。ローカルなプロバイダのためか,MEGA EGGの情報が少ないため,自分のメモを兼ね,このページを作りました。
Linuxのインストール
Debianのインストールでは,ネットワーク経由が最も便利のようです。とりあえず,最小構成CDイメージをダウンロードしましたが,書籍や雑誌の付録で,インストールしてもOKです。
download CD-ROM image, Debian GNU/Linux 3.0 woody-i386-1.iso
burn CD-ROM with Nero
boot from CD-ROM
install debian following instructions
とりあえずネットワークカードの設定をしてください。あとで,PPPoEに使用するネットワークカードは,IPアドレス等を設定しないでください。
/etc/network/interfaces
/etc/resolv.conf
dselectが使えるように,sources.listを設定してください。
#vi /etc/apt/souces.list
PPPoEのセットアップ
Debian標準のpppoe-3.3ではどうしても,PPPoE接続できなかったので,rp-pppoe-3.5をインストールしました。まだインターネットにつながっていないなら,Windowsでダウンロードしておいて,Windowsのパーティションをマウントしてコピーすると簡単です。
get rp-pppoe-3.5.tar.gz in /usr/src
#tar zxvf rp-pppoe-3.5.tar.gz
#cd /usr/src/rp-pppoe-3.54
#./go
user name =
interface = eth1
demand value = no
DNS information = server
password =
mode = masquarade
#adsl-start
#ifconfig -a ppp0
ifconfig -a ppp0で,接続を確認してください。
eth1は/etc/network/interfacesでは,設定しないでください。しかし,当然ながらLinuxのドライバは認識している必要があります。
kernelの再構築
#dselect
iptablesを使用したり,ネットワークカードのドライバを,eth0をビルトインに,eth1をモジュールにするために,カーネルを再構築します。また,バックアップもかねて,2.4.18にバージョンもアップしておきます。
kernel-source-2.4.18-14.3
libncurses5-dev 5.2.20020112a-7
kernel-package 7.107
#cd /usr/src
#tar zvfj kernel-source-2.4.18.tar.bz2
#cd kernel-source-2.4.18
#make menuconfig
select eth0 NIC as built-in
select eth1 NIC as module
#make-kpkg clean
#make-kpkg kernel-image
#dpkg -i ../kernel-image-2.4.18_10.00.Custom_i386.deb
no
yes
#mv /etc/modules /etc/modules.org
#cat /etc/modules.org /dev/tty1 > /etc/modules
eth1 NIC module name
^D
#reboot
初期設定
とりあえず,スタート時にadsl-startを起動するために,リンクを張ります。余裕ができれば,ちゃんと起動スクリプトを作ってください。
#ln -s /usr/sbin/adsl-start /etc/ppp/ppp_on_boot
ルータとして使用するためには,iptablesの設定がとりあえず必要ですので,設定します。これも,余裕ができれば,ちゃんと作り直しましょう。
#cd /etc/default
#mv iptabes iptables.org
#cat iptables.org iptables.sam > iptables
#update-rc.d iptables defaults
#reboot
クライアントでは,eth0のアドレスをゲートウェイに,また,/etc/resolv.confのアドレスをDNSに設定しましょう。これで,クライアントからインターネットが利用できるはずです。
samba
共有ディスクとして使うために,sambaを設定します。普通の使用法なら,Debianの標準パッケージで十分のようです。
インストール後にsmb.confを設定します。
#dselect
samba 2.2.3a-13
#vi /etc/samba/smb.conf
時刻を合わせるために,ntpdateも導入しましょう。タイムサーバとしては,clock.nc.fukuoka-u.a.cjpを使いました。用途によっては,ntpdを導入したほうが良いかもしれません。
#dselect
ntpdate 4.1.0-8
#ntpdate clock.nc.fukuoka-u.a.cjp

なぜかMINIX 1.5

秋の夜長に、暇でもないのに、昔熱中したというか感動した、MINIXを久々に引っ張り出してみた。
1987年に教材用のOSとして誕生し、いまのlinux誕生のきっかけとなったものです。
PC-9800無印から、プロサイドのPC-AT互換機に早々と乗り換えていたので、洋書を注文して、熱中した。ハードディスクにインストールして使っていたが、ハードディスクのクラッシュで立ち消えになり、今となっては、すべてがうろ覚えです。
○MINIX 1.5
当時はV1.1を使っており、patchを当てまくったが、V1.5まではたどり着けなかった。
V1.7以降は、ANSI-CにPOSIXとなり、現在はV3となっているが、シンプルさを追求して、とりあえず、憧れのV1.5に挑戦。データはhttp://www.minix3.org/のPrevious versionsからダウンロード。
pcは360K、psは720Kのディスク用なので、ps版を使用する。
○VMware
新しくマシンを準備するわけにも行かないので、エミュレータを使用する。
Bochsでは動くけれど低速、VirtualPCとVMwareはuniv_boot.01を使用すれば、ブートメニューは表示されるが、RAMディスクの読み込みで停止してしまう。原因はディスク周りのようで、V1.5は3.5FD2HD(1440K)を完全にサポートしていないためと思われる。いろいろ試した結果、VMware6.5.3はディスクイメージファイルを720Kに合わせてやれば、動かすことができた。
disk.02(720K)でブートし、ルートのdisk.04(720K)に交換したのち、”=”(日本語キーボードでは”^”)でスタート。/usrディスクが要求されたら、disk.05に交換。これで、無事に起動する。
このままでも動くが、RAMディスクをルートにしたままでは、/tmpの容量が不足し、コンパイラが走らない。
○ハードディスク
ハードディスクはのパーティショニングは本来fdisk /dev/hd0でOKのはずだが、エラーが出るので他のOSに仮想ディスクを繋げて、partition 1を切って、MINIXのIDに変更する。
/etc/mount /devhd1 /userでマウントできることを確認できれば、/etc/setup_usrを参考にハードディスクにファイルを展開。その後。/etc/setup_rootを参考に、ハードディスクをルートに変更する。
ハードディスクを使用した場合は、ディスクの入れ替えは不要なので、/etc/rcを修正しておく。
disk.02(720K)で再起動し、ブートメニューでルートをh1にしてスタートすれば、OK。
○カーネルの再構築
/usr/src/kernelでconfig atを実行し機種設定し、kernel, fs, mmの各ディレクトリでmakeを実行。
その後、/usr/src/toolsでもmake allを実行する。あとは、720Kの仮想ディスクをセットし、make imageで書き込みをすれば完成。再起動して問題なければ、/usr/include/minix/boot.hを変更し、ルートを/dev/hd1に変更しておく。
○test
/usr/src/testでmake allを実行し、runでテスト開始。sh1のテストに必要なchipがないので、とりあえずスクリプトで補完。
#!/bin/sh
if test $1 = INTEL ; then exit 0 ; else exit 1 ; fi
sh2はrootで実行するとchmod test 2でエラーとなるがそれはOK
昔から、ちょっとしたバグがあり、ついつい楽しんでしまうので、バグに計画性を感じてしまう。
○その他
エディタは、Vi互換の昔懐かしいelvisが使える。ただし、これも/usr/tmpを使用するので、ハードディスクでなければ困難。
DOSとのデータ交換はdos*が使える。本体はdosreadなので、ln dosread dosdir ; ln dosread doswriteでリンクを張っておく。デバイスも、ln /dev/fd0 /dev/dosAと必要なリンクを張る。
これも、2DDまでの対応なので、720KのDOS仮想ディスクをセットし、dosdir aなどで、ファイルを確認したら、dosread a readme.txt > readmeなどと標準出力を書き込んでおく。
機能は貧弱だし、カレントディレクトリにPATHが通って、セキュリティの観念もない時代のOSだが、シンプルで、ほぼ全てがCで記述され、ライブラリのソースまでついている。
ASタネンバウム教授は、linuxに批判的であったことについては、大学人であったためにUNIXを渇望していた一般人の気持ちがわからなかったのではないかと思いますが、このMINIXの存在はlinuxの隆盛にも決して劣りません。MINIXのシステムは体系的で完成度が高く、このシステムがあったからこそ、linux開発のきっかけとなったとつくづく思います。
記念的なOSと思うのですが、当時あれだけあったV1系の資料が、今はインターネット上にほとんどないのが残念です。

そしてMINIX 1.5

懐かしくって、いろいろ触っているとなぜか、3.5インチの1.4MのDOSディスクが読めない。720KのDOSディスクはdosreadでちゃんと読み込めるのに。
ドライバではサポートされているみたいなのにと悩んだが、ソースをよく読んで解決。
デフォルトでは、ドライブAもBもAUTOMATICになっているので、5インチ1.2Mと区別できないようだ。
/usr/include/minix/config.hのDEFAULT_CLASSを0から3に変更してやると、ドライブAが3.5インチ、ドライブBが5インチとなり、3.5インチの1.4MのDOSディスクが読めるようになった。
昔はハードディスクを使っても再構築に時間がかかっていたのに、VMwareで動かしても、あっという間にできてしまう。思えば、Linuxも昔は再構築が割りと早かったなあ。