#author("2025-02-27T20:58:20+09:00","default:dramsukohome","dramsukohome") #author("2025-03-02T09:10:24+09:00","default:dramsukohome","dramsukohome") [[Linux]] #shadowheader(1,VPN Centos); #Contents *vpn 比較 [#q1af3335] -[[こちら:http://jp.giganews.com/vyprvpn/compare-vpn-protocols.html]]のサイト参照 -- openVPN を初めにインストールしましたが、~ ios へ対応していないのでボツ -- 次に pptp をインストールしましたが、~ emobile に対応していないのでボツ -- 最後に L2TP をインストール *pptp サーバー構築 (CentOS 5) [#jd2be6ab] - ppp のインストール -- yum install ppp - download -- [[http://sourceforge.net/projects/poptop/files/:http://sourceforge.net/projects/poptop/files/]] - rpm build のためファイルを下記ディレクトリへコピー -- cp ./pptpd-1.3.4.tar.gz /usr/src/redhat/SOURCES/ - rpm を build -- rpmbuild -ta pptpd-1.3.4.tar.gz - rpm からインストール -- cd /usr/src/redhat/RPMS/i386/ -- rpm -ivh pptpd-1.3.4-1.i386.rpm - /etc/pptpd.conf 編集 -- vi /etc/pptpd.conf -- 最後に下記を追加 ppp /usr/sbin/pppd localip 192.168.1.101-110 remoteip 192.168.2.111-120 #logwtmp < logwtmp をコメントアウト - ppp の設定 -- vi /etc/ppp/options.pptpd name pptpd domain tar3.net # localip と remoteip が LAN 側サブネットに含まれる場合は proxyarp を有効にします。 proxyarp auth lock refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 192.168.1.37 ms-dns 192.168.1.1 ms-wins 192.168.1.37 nobsdcomp novj novjcomp nologfd mtu 1200 mru 1200 debug -- vi /etc/ppp/chap-secrets hoge pptpd password * - ルーティング機能を有効にする -- echo 1 > /proc/sys/net/ipv4/ip_forward -- vi /etc/sysctl.conf net.ipv4.ip_forward = 1 - ファイアウォールの 1723 と 47 のポートを開ける(iptables) -- vi /etc/sysconfig/iptables -A FORWARD -i ppp+ -j ACCEPT -A FORWARD -o ppp+ -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p gre -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT - 外とのルーターポートをNATで開ける -- 1723 と 47 ポート - Windowsのネットワークコンピュータで LAN内部の別コンピュータのが見えるように~ -- /etc/samba/smb.conf を編集 [root@sv22 ~]# vi /etc/samba/smb.conf ; domain master = yes ↓ domain master = yes ; local master = no ↓ local master = yes ; preferred master = yes ↓ preferred master = yes ; os level = 33 ↓ os level = 65 ; wins support = yes ↓ wins support = yes -Samba再起動 [root@sv22 ~]# /etc/rc.d/init.d/smb restart SMB サービスを停止中: [ OK ] NMB サービスを停止中: [ OK ] SMB サービスを起動中: [ OK ] NMB サービスを起動中: [ OK ] *L2TP サーバー構築(centos 5) [#j22d5570] **参考サイト [#zb999906] -[[参考外部サイト:http://sig9.hatenablog.com/entry/2015/07/12/233445]] **CentOS に epel レポジトリのインストール [#n91c6a50] - 参考URL~ --[[32bit版CentOS 6の場合は:http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/i386/]] --[[64bit版CentOS 6の場合は:http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/]] --[[32bit版CentOS 5の場合は:http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/i386/]] --[[64bit版CentOS 5の場合は:http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/x86_64/]] -CentOS 5.5 に EPEL リポジトリを追加する --cd /etc/pki/rpm-gpg/ --wget http://mirrors.ustc.edu.cn/fedora/epel/RPM-GPG-KEY-EPEL --rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL --rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/5/i386/epel-release-5- -CentOS 6(32bit) に EPEL リポジトリを追加 rpm -Uvh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/i386/epel-release-6-8.noarch.rpm vi /etc/yum.repos.d/epel.repo -EPEL リポジトリの利用準備が整ったら、L2TP を実現するためのパッケージ "xl2tpd" をインストール --yum install xl2tpd ** 編集ファイル一覧 [#n17a162c] - /etc/xl2tpd/xl2tpd.conf - /etc/ppp/options.xl2tpd - /etc/strongswan/ipsec.conf - /etc/strongswan/ipsec.d/l2tp-psk.conf - /etc/strongswan/ipsec.secrets - /etc/sysctl.conf - /etc/ppp/chap-secrets - /etc/sysconfig/selinux - /etc/sysconfig/iptables ** /etc/xl2tpd/xl2tpd.conf の編集 [#u3f05004] -- vi /etc/xl2tpd/xl2tpd.conf [global] [lns default] ip range = 192.168.1.128-192.168.1.254 local ip = 192.168.1.99 require chap = yes refuse pap = yes require authentication = yes name = VPNserver ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes ** /etc/ppp/options.xl2tpdの編集 [#ya1c1e82] -- vi /etc/ppp/options.xl2tpd auth crtscts debug lock proxyarp refuse-pap refuse-chap refuse-mschap require-mschap-v2 logfile /var/log/xl2tpd.log ms-dns 192.168.1.1 ms-dns 192.168.1.2 ipcp-accept-local ipcp-accept-remote ** IPSec のインストール [#xd64f958] *** strongswan のインストール(yum) [#c8a76e5c] openswan にiPhoneからつながらない不具合が有り、~ strongswan に変更 yum install strongswan *** /etc/strongswan/ipsec.conf の編集 [#j93d9be0] - vi /etc/strongswan/ipsec.conf version 2.0 config setup protostack=netkey nat_traversal=yes include /etc/strongswan/ipsec.d/*.conf *** /etc/strongswan/ipsec.d/l2tp-psk.conf ファイルの作成 [#p3f5fcf9] - vi /etc/strongswan/ipsec.d/l2tp-psk.conf conn L2TP-PSK-NAT rightsubnet=0.0.0.0/0 #rightsubnet=vhost:%priv forceencaps=yes dpddelay=10 dpdtimeout=30 dpdaction=clear also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT #conn L2TP-PSK # # Configuration for one user with any type of IPsec/L2TP client # including the updated Windows 2000/XP (MS KB Q818043), but # excluding the non-updated Windows 2000/XP. # # # Use a Preshared Key. Disable Perfect Forward Secrecy. # # PreSharedSecret needs to be specified in /etc/ipsec.secrets as # YourIPAddress %any: "sharedsecret" authby=secret pfs=no auto=add keyingtries=3 # we cannot rekey for %any, let client rekey rekey=no # Apple iOS doesn't send delete notify so we need dead peer detection # to detect vanishing clients #dpddelay=5 #dpdtimeout=10 #dpdaction=clear # Set ikelifetime and keylife to same defaults windows has ikelifetime=8h keylife=1h # l2tp-over-ipsec is transport mode type=transport left=192.168.1.3 leftnexthop=%defaultroute #leftsubnet=192.168.1.0/24 # For updated Windows 2000/XP clients, # to support old clients as well, use leftprotoport=17/%any leftprotoport=17/1701 # The remote user. right=%any # Using the magic port of "%any" means "any one single port". This is # a work around required for Apple OSX clients that use a randomly # high port. rightprotoport=17/%any #rightprotoport=17/0 #ike=3des-md5 #esp=3des-md5 #forceencaps=yes *** /etc/strongswan/ipsec.secrets の編集 [#cb93133f] - vi /etc/strongswan/ipsec.secrets : PSK "password" include /etc/strongswan/ipsec.d/*.secrets - root 以外の参照禁止 --chmod go-rwx /etc/strongswan/ipsec.secrets *** (参考) Log levelの変更 [#f65e6acc] sudo vi /etc/strongswan/strongswan.d/charon-logging.conf +2個所(fileとrsyslog) # Default loglevel. # default = 1 default = 2 ** 起動 [#b26bc26a] - service strongswan start - service xl2tpd start ** 自動起動の設定 [#fcf48df3] -chkconfig strongswan on -chkconfig xl2tpd on **NETKEY detected, testing for disabled ICMP send_redirects [FAILED] 対策 [#uce6303e] - vi /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 net.ipv4.conf.eth1.accept_redirects = 0 net.ipv4.ip_forward = 1 **反映 [#j7a75f4b] - sysctl -p **Pluto listening for IKE on udp 500 Pluto listening for NAT-T on udp 4500 [FAILED] 対応 [#f4032877] yum install lsof **libpcap-devel のインストール [#n440e100] yum install libpcap-devel ppp ** selinux 無効化 [#z2663064] - vi /etc/sysconfig/selinux SELINUX=disabled ** サーバーの再起動 [#u6a717ae] ** iptables 編集 [#t47573ec] - vi /etc/sysconfig/iptables -- 追加 -A FORWARD -i ppp+ -j ACCEPT -A FORWARD -o ppp+ -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p esp -j ACCEPT -A INPUT -p udp -m udp --dport 50 -j ACCEPT -A INPUT -p udp -m udp --dport 500 -j ACCEPT -A INPUT -p udp -m udp --dport 4500 -j ACCEPT -A INPUT -p udp -m udp --dport 1701 -j ACCEPT ** /etc/ppp/chap-secrets の編集 [#f3e9a6dc] - vi /etc/ppp/chap-secrets # アカウント 接続名 パスワード IPアドレス "vpn-account" * "vpn-password" * ** log ファイル、ひな形の作成 [#y61f1ddf] touch /var/log/xl2tpd.log ** ルーターのポート開放 [#r22a8dec] - udp 500 - udp 4500 - 50 - 1701 ** Client の設定 [#f328d2b5] *** Windows [#h58ac449] +レジストリの変更 [#k194a06b] -- regedit --- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent --- 新規 「DWORD値」[AssumeUDPEncapsulationContextOnSendRule ] --- 値 2 + Windows,エラー,1 [#gd104903] -指定したユーザー名またはパスワードが認識されないか、選択した認証プロトコルがリモート アクセス サーバーで許可されていないため、リモート接続が拒否されました。」 --本当にパスワードが間違えてる。 --コピペでなく手打ちすると直った。 *** iPhone [#y23e04af] +iPhone の設定で気をつけること [#cd5fd356] 「全ての全ての通信を送信」のチェックがOnだと AU wifi につなげた状態では~ VPN に繋がりませんでした。チェックをオフにすると繋がります。 *** Linux(Ubuntu) [#r3218d82] -関連ソフトのインストール sudo apt install network-manager-openvpn network-manager-l2tp -以下,KDEでの設定 ++ 「設定」-「接続」 ++ 「+」 -> 「レイヤ2トンネリング プロトコル(L2TP)」を選択 +++ 接続名:適当に決める +++ 「VPN(l2tp)」タブを選択 +++ Gateway : 接続先URL 例) vpn.hoge.net +++ User name : ユーザー名 +++ Password : パスワード ++ 「IPSec Settings...」ボタン +++ チェックオン「Enable IPsec tunnel to L2TP host」 +++ 「Pre-shared key」を入力 * OpenVPN [#md0d17c9] -[[参考サイト:https://centossrv.com/openvpn.shtml]] ** 設定関連図(構成図) [#k4621803] Client1 -> Internet - udp -> キャリアルーター -> VPN サーバ -> Internet(全ての通信がVPNサーバ経由を目標とする)~ ※tcp は重い。server.conf に tcp-nodelay オプションを記入することにより改善されるが重い。~ ※tcp にするには、server.conf で udp を無効化しtcp を有効化。 同様に client 設定ファイルも行う。 ** OpenVPN Install [#v02e754c] *** 必要なパッケージのインストール [#e05fe3f7] sudo yum -y install openssl-devel lzo-devel pam-devel gcc *** OpenVPN のインストール [#i36f5d11] mkdir temp wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.12.tar.gz - rpm-buildのインストール --[[このリンク先を参照(サイト内)>Linux#y2790b50]] - RPM パッケージの生成 sudo rpmbuild -tb --clean openvpn-2.3.12.tar.gz - RPM パッケージからインストール sudo yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.12-1.x86_64.rpm *** easy-rsa のインストール [#ld9dbc80] cd ~/temp wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip - easy-rsa をコピー sudo cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ ** 証明書の作成とファイルのコピー [#r543789a] ※以下 su - で実行 *** 最初の1回のみ初期化 [#v215f57c] cd /etc/openvpn/easyrsa3/ ./easyrsa init-pki *** CA証明書・秘密鍵作成 [#z08e40b7] - CA証明書は認証局サーバで認証するための証明書 [[参考(認証局)(外部サイト):https://jp.globalsign.com/knowledge/ca.html]] ./easyrsa build-ca ~ Enter PEM pass phrase: (任意のパスワード) Verifying - Enter PEM pass phrase: (任意のパスワード)(確認) ~ Common Name (eg: your user, host, or server name) [Easy-RSA CA]:(サイト名) 例) tar3.net ~ CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /root/easy-rsa-master/easyrsa3/pki/ca.crt - CA証明書のコピー cp pki/ca.crt /etc/openvpn/ *** サーバ証明書の作成 [#h3722ce5] ./easyrsa build-server-full server nopass Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: (CA秘密鍵のパスワード)(上記で入力) ~ Data Base Updated - ファイルのコピー cp pki/issued/server.crt /etc/openvpn/ cp pki/private/server.key /etc/openvpn/ *** DH(Diffie Hellman)パラメータ作成 [#e40aa37e] -DH(Diffie Hellman)パラメータとは? -- [[参考 外部サイト:http://devillinuxvpn.eksd.jp/appendix_dhkeyexchange.html]] -- 以下抜粋 (セキュリティー確保のため共有キーを直接やりとりしないために)登場するのが、 DH鍵交換方式。 DH鍵交換方式では、共通鍵そのものを送受信せず、 共通鍵を作り出す材料となる数のみを互いに交換する。 共通鍵そのものを送受信していないのに、同じ共通鍵を持つことができ セキュリティーを確保することができる。 -DH(Diffie Hellman)パラメータ作成 ./easyrsa gen-dh (少し時間がかかるので終わるまで待つ(数分?) -ファイルのコピー cp pki/dh.pem /etc/openvpn/ *** 証明書廃止リスト作成 [#i6c69c89] ./easyrsa build-client-full dmy nopass ~ Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:(CA秘密鍵のパスワード)(上記で入力) ~ Write out database with 1 new entries Data Base Updated - 廃止 ./easyrsa revoke dmy ~ Continue with revocation: yes (Enter) ~ IMPORTANT!!! Revocation was successful. You must run gen-crl and upload a CRL to your infrastructure in order to prevent the revoked cert from being accepted. - 作成 ./easyrsa gen-crl ~ Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:(CA秘密鍵のパスワード)(上記で入力) An updated CRL has been created. CRL file: /etc/openvpn/easyrsa3/pki/crl.pem - ファイルのコピー cp ./pki/crl.pem /etc/openvpn/ - アクセス権の変更 chmod o+r /etc/openvpn/crl.pem ** OpenVPN の設定(server.conf) [#fa72fde1] ※以下 su - で実行 - TLS認証キーの作成 openvpn --genkey --secret /etc/openvpn/ta.key - サンプル設定ファイルのコピー cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/ - server.conf の編集~ [[参考(OpenVPN日本語サイト):http://www.openvpn.jp/document/how-to/#RoutedOrBridged]]内~ 「クライアントのすべてのトラフィック(Webトラフィックを含む)をVPN経由にルーティングする」 -- vi /etc/openvpn/server.conf port 1194 ~ proto udp ※tcp は重い。server.conf に tcp-nodelay オプションを記入することにより改善されるが重い。 ※tcp にするには、server.conf で udp を無効化しtcp を有効化。 同様に client 設定ファイルも行う。 ~ dev tun ← 確認するだけ。デフォルトで設定済み ~ ca ca.crt cert server.crt key server.key # This file should be kept secret ~ dh dh.pem ← 左記のように変更する。DHパラメータ ファイル名 ~ server 10.8.0.0 255.255.255.0 ← VPNクライアント割当てアドレス範囲(デフォルト) ~ ifconfig-pool-persist ipp.txt ~ ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" push "route 192.168.3.0 255.255.255.0" ← 追加(LAN(例:192.168.3.0/24)へのルートをVPNサーバー経由にする) ~ push "redirect-gateway def1" <- インターネットへのアクセスをVPN経由で行う ~ push "dhcp-option DNS 192.168.1.1" <- インターネットアクセス時に使用するDNSサーバ ~ tls-auth ta.key 0 # This file is secret ← 行頭の;を削除してコメント解除(TLS認証有効化) ~ comp-lzo ~ user nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる) group nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる) ~ persist-key persist-tun ~ status openvpn-status.log ~ log-append /var/log/openvpn.log ← 行頭の;を削除してコメント解除(ログを/var/log/openvpn.logに記録する) ~ verb 3 ~ management localhost 7505 ← 最終行へ追加(管理インタフェースの有効化※後述) ~ crl-verify crl.pem ← 最終行へ追加(証明書廃止リストの有効化) ~ 最終行へ以下を追加(OpenVPN経由でSambaへのアクセスがエラーになる場合) fragment 1280 mssfix 1280 link-mtu 1400 cipher AES-128-CBC ** ファイアウォール設定 (省略) [#e9d7ab41] ** ログ ローテーション [#kf484de5] ※以下 su - で実行 - vi /etc/logrotate.d/openvpn /var/log/openvpn.log { missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript } ** OpenVPN の起動 [#k60bb994] ※以下 su - で実行 *** OpenVPN 起動スクリプトの編集 [#kb53a6b2] - vi /etc/rc.d/init.d/openvpn -- 行頭の # を削除してコメント解除 echo 1 > /proc/sys/net/ipv4/ip_forward *** OpenVPN の起動 [#p7b8bb2d] service openvpn start *** 自動起動の設定 [#oa9e6f69] chkconfig openvpn on ** ファイアウォール設定 [#m0755311] 設定関連図(構成図)~ Client1 -> Internet -> キャリアルーター -> VPN サーバ -> Internet(全ての通信がVPNサーバ経由を目標とする) *** キャリアルーターの設定 [#j01c0a5a] +1194ポートをVPNサーバへ転送(tcp の場合は tcp ポートを。udp の場合はUDPポートを) +10.8 系へのルートの追加 10.8.0.0 のゲートウェイを VPNサーバへ *** VPNサーバのファイアウォール設定(省略) [#j4f86180] ** クライアント証明書の秘密キー作成 [#qd1e818c] ※以下 su - で実行 *** クライアント証明書・秘密鍵作成(パスフレーズ認証なし) [#b48cd22a] cd /etc/openvpn/easyrsa3/ ./easyrsa build-client-full client1 nopass Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: (CA秘密鍵のパスワード入力) Write out database with 1 new entries Data Base Updated ** クライアントの設定 [#m7628219] *** Windows(iPhoneの場合も設定ファイルを作るのでこちらから) [#ob4f7108] +共通 ++ OpenVPN クライアントのダウンロード --- [[OpenVPN:https://openvpn.net/index.php/open-source/downloads.html]] ++ OpenVPN のインストール +新(2019/2/5) --(設定ファイルがある前提でスタート) ++OpenVPNソフトを起動 ++タスクトレイにあるOpenVPNアイコンを右クリック、「Import File」を選択 ++*.ovpn ファイルを選択 ++タスクトレイにあるOpenVPNアイコンを右クリック、「設定」を選択 ++「Advanced」タブを選択 ++「設定ファイル」の場所を確認し、「ディレクトリ」のPATHをコピーする。 ++エクスプローラーで上記のコピーしたPATHを開く ++以下のファイルをコピーする。 +++ ca.crt (/etc/openvpn/easyrsa3/pki/ca.crt) +++ ta.key (/etc/openvpn/ta.key) +++ 接続名.crt 例) clientConnect.crt (/etc/openvpn/easyrsa3/pki/issued/clientConnect.crt) +++ 接続名.key 例) clientConnect.key (/etc/openvpn/easyrsa3/pki/private/clientConnect.key) ++接続の確認 +++ タスクトレイにあるOpenVPNアイコンを右クリック、「接続」を選択 +旧 ++ サンプルファイルのコピー --- コピー元 C:\Program Files\OpenVPN\sample-config\client.ovpn --- コピー先 C:\Program Files\OpenVPN\config ++ client.ovpn の編集 --- 外からクライアントで接続する先を設定 remote tar3.net 1194 --- クライアント証明書、秘密鍵の指定 ca ca.crt cert client1.crt key client1.key --- 中間者攻撃(Man-in-the-Middle)対策。※中間者攻撃については[[こちら(wikipedia)から:https://ja.wikipedia.org/wiki/%E4%B8%AD%E9%96%93%E8%80%85%E6%94%BB%E6%92%83]] remote-cert-tls server --- TLS 認証の有効化 tls-auth ta.key 1 --- (参考) Samba アクセス対策(追加) fragment 1280 mssfix 1280 link-mtu 1400 ++必要ファイルをクライアントへコピー(※必ずセキュアな接続で行うこと) --- コピー元 > +++ CA証明書 /etc/openvpn/ca.crt +++ クライアント証明書 /etc/openvpn/easyrsa3/pki/issued/client1.crt +++ クライアント秘密鍵 /etc/openvpn/easyrsa3/pki/private/client1.key +++ TLS認証鍵 /etc/openvpn/ta.key < --- コピー先 > - C:\Program Files\OpenVPN\config < *** iPhone(Windows の場合が終わってから) [#r7a0f789] - OpenVPN のインストール - iTunes 経由で iPhone へファイルを送り込む。 -- iTunes -> iPhone -> アプリ -> 下に画面をスクロールすると、ファイルを入れられる機能がある ** 接続確認 [#jd8f029b] *** Windows [#g2596e75] - OpenVPN を起動し、タスクトレイにあるアイコンを右クリック、接続を選択 -- Windows のネットワークは、インターネット経由(テザリング)などにしておくほうが望ましい。~ 自宅LANからだと名前解決、認証解決ができない場合が多い。~ また本当の意味でのテストにならない。 -- 「確認くん」というグローバルIPをチェックするサイトがある(これで接続の状況がわかる。) -- [[CMAN(Global address 確認):https://www.cman.jp/network/support/go_access.cgi]] *** iPhone [#x45d0d9c] - OpenVPN アプリの起動。 - 緑色の + ボタンを押す。 - あとは○をスライドし接続する。 -- iPhone の場合も、無線LAN環境ではなく、4G回線などインターネット経由が望ましい。~ 理由は上記の Windows の場合と同様。~ 無線LAN環境をやめるためには、現在接続設定がある全ての無線LANの接続を切断し、~ どこの無線LANにも繋がっていない環境を作ることにより可能。 *** 疎通確認 [#r6b00033] Ping による疎通確認が可能だが、通らない場合は大抵ルートの問題。~ キャリアルーターにきちんと静的ルートが書いてあるか。また間違えてないか、など~ OpenVPN サーバの Push "Route ..." は関係ない場合が多く、そこをいじっても解決しない時が多い。 *** VPNクライアントの削除 [#ca836d89] ※以下 su - で実行 -クライアント証明書廃止 cd /etc/openvpn/easyrsa3/ ./easyrsa revoke client1 ~ Continue with revocation: yes を入力 ~ Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key <-CA秘密鍵のパスワードを入力 -証明書類の削除 rm -f ./pki/issued/client1.crt ← client1証明書類削除 rm -f ./pki/private/client1.key ← client1証明書類削除 rm -f ./pki/reqs/client1.req ← client1証明書類削除 ./easyrsa gen-crl ← 証明書廃止リストを作成 ~ Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: <-CA秘密鍵のパスワードを入力 ~ CRL file: /etc/openvpn/easyrsa3/pki/crl.pem -廃止証明書のコピー cp ./pki/crl.pem /etc/openvpn/ -廃止証明書への権限付与 chmod o+r /etc/openvpn/crl.pem ***接続中クライアントの強制切断 [#s1179195] ※以下 su - で実行 -telnet のインストール yum install telnet -OpenVPN の管理インターフェースへアクセス telnet localhost 7505 -status の確認 status client1,124.211.3.180:1617,6882,7144,Tue Nov 28 19:26:53 2006 ← client1が接続中 -client1 の強制切断 kill client1 -status の再確認 status -OpenVPN管理インタフェース終了 exit ** トラブル [#cac0d20b] *** Server:Version2.4, Client:Version2.6,繋がらない [#o429645a] -エラーメッセージ -- OpenSSL: error:0308010C:digital envelope routines::unsupported Cipher algorithm 'BF-CBC' not found Unsupported cipher in --data-ciphers: BF-CBC -採用されなくなったcipher(サイファー)が原因 + サーバー側 ++ sudo vim /etc/openvpn/server.conf --- 末尾に以下を追加 cipher AES-128-CBC + クライアントの.ovpnファイルの末尾へ追加 ++Version2.6 data-ciphers AES-128-CBC ++Version2.4 cipher AES-128-CBC * WireGuard [#hb872620] ** 参考リンク [#lda4e9a3] +[[WireGuardは良き 〜インストールから導入まで〜:https://qiita.com/yuito723/items/13d9ddafe0f10bb8d2b7]] +[[【Ubuntu】WireGuardで簡単VPN環境を構築:https://vpslife.server-memo.net/ubuntu_wireguard_install/]] ** 構成 [#v7fe2bb4] +「クライアント(PC,スマホなど)」 <- インターネット -> LAN ++ 「WireGuard server」(LAN IP address) 192.168.1.0/24 (ルーターで51820ポートを通すのはこっち) ++ 「WireGuard server」(VPN用 IP address) 192.168.2.0/24 (クライアントがVPNに繋った時、このレンジのIPアドレスが割り当たる) +WireGuard server : Ubuntu 24.04 server +WireGuard : 1.0.20210914-1ubuntu4 ** 事前準備 [#u8e73490] *** forwardの有効化 [#sd2f446d] sudo vi /etc/sysctl.conf -以下のコメントアウトを削除(有効化) # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1 -反映 sudo sysctl -p ** install(Ubuntuのセットアップは省略) [#s491fca2] + sudo apt update + sudo apt upgrade + sudo apt install ** 鍵の作成 [#a82db56a] +Server鍵の作成(秘密鍵、公開鍵)~ わかりやすいように /etc/wireguard/wg0/ ディレクトリ配下に作ります。~ (wireguardディレクトリ配下だと煩雑になるので。。。) sudo mkdir /etc/wireguard/wg0 sudo wg genkey | sudo tee /etc/wireguard/wg0/server.key sudo chmod 600 /etc/wireguard/wg0/server.key -- server.keyから公開鍵の作成 sudo cat /etc/wireguard/wg0/server.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/server.pub sudo chmod 600 /etc/wireguard/wg0/server.pub +クライアント1用の鍵の作成(秘密鍵、公開鍵、事前共有鍵) sudo wg genkey | sudo tee /etc/wireguard/wg0/client0.key sudo cat /etc/wireguard/wg0/client0.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/client0.pub sudo wg genkey | sudo tee /etc/wireguard/wg0/client0-preshared.key sudo chmod 600 /etc/wireguard/wg0/client0.key sudo chmod 600 /etc/wireguard/wg0/client0.pub sudo chmod 600 /etc/wireguard/wg0/client0-preshared.key ++ クライアント2用の鍵の作成(秘密鍵、公開鍵、事前共有鍵) sudo wg genkey | sudo tee /etc/wireguard/wg0/client2.key sudo cat /etc/wireguard/wg0/client2.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/client2.pub sudo wg genkey | sudo tee /etc/wireguard/wg0/client2-preshared.key sudo chmod 600 /etc/wireguard/wg0/client2.key sudo chmod 600 /etc/wireguard/wg0/client2.pub sudo chmod 600 /etc/wireguard/wg0/client2-preshared.key ++ 以下、クライアントの数だけ繰り返し。~ 自分は6つの携帯やPCがあったので6個作りました。~ ちなみに同時接続できるのは 1 peer あたり1つの端末です。~ 端末が複数ある場合は peer を分けて複数IPで運用する方が良さそうです。 ** server側の設定ファイルを作成 [#y472f440] sudo vi /etc/wireguard/wg0.conf [Interface] #ClientがVPNに接続した時に割り当てられるIP。serverのLAN内のIPレンジとは別にする。 Address = 192.168.2.0/24 #自分の場合、変なルートになってLANに繋らなかったので入れました。 Table = off #設定ファイルのコメントなどが消えてしまうのでfalseとしてコメントアウト #SaveConfig = true #iptablesだけではなんか通らなかったので、ufwの設定も追加 #「ens18」は各自の環境に合わせて書き換え必要。 ip addr show コマンドで確認できる。 PostUp = ufw route allow in on wg0 out on ens18 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on ens18 PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE ListenPort = 51820 #上記の server.key の中身を記載 PrivateKey = abcdefg= #iPhone(1台目) [Peer] #上記の client0.pub の内容を記載 PublicKey = abcdefg= #上記の client0-preshared.key の内容を記載 PresharedKey = abcdefg= #クライアントがVPNへ接続した際、割り当てられる仮想IPを記載 #(今回は192.168.2.0/24の中のIPを設定する) AllowedIPs = 192.168.2.201/32 #Android(2台目) [Peer] #上記の client2.pub の内容を記載 PublicKey = abcdefg= #上記の client2-preshared.key の内容を記載 PresharedKey = abcdefg= #クライアントがVPNへ接続した際、割り当てられる仮想IPを記載 #(今回は192.168.2.0/24の中のIPを設定する) AllowedIPs = 192.168.2.202/32 ** client側の設定ファイルを作成 [#rad2f703] sudo vi /etc/wireguard/wg0/client0.conf [Interface] #上記の client0.key の値を設定 PrivateKey = abcdef= #クライアントがVPNで接続した際、VPNサーバから割り当てられるIPアドレスを記載。 #上記の peer の設定を合わせておく必要がある Address = 192.168.2.201/32 #DNSの設定とsearch domainの設定。カンマ区切り。自分の好みに書き換えて設定しましょう DNS = 8.8.8.8, 8.8.4.4, searchDomain.com [Peer] #上記の server.pub の内容を記載 PublicKey = abcdef= #client0-preshared.key の内容を記載 PresharedKey = abcdef= AllowedIPs = 0.0.0.0/0 #接続先のサーバー名を入れましょう #(インターネット越しでアクセスするので、変動IPの場合はDDNSなどのドメイン名を入れます) Endpoint = serverName.domain.com:51820 ** WireGuardの起動と再起動時の自動起動 [#g8b247bb] sudo wg-quick up wg0 sudo systemctl enable wg-quick@wg0 ** (参考) 停止と無効化、再起動前の実行 [#tee8e3a4] sudo wg-quick down wg0 sudo systemctl disable wg-quick@wg0 ** QRコードでのクライアント設定準備(QRコード表示準備) [#kf781464] + qrencode のインストール sudo apt install qrencode + QRコードの表示 qrencode -t ansiutf8 < [作成したスマートフォン用設定ファイル名] -- 他の方法 sudo qrencode -t ansiutf8 -r /etc/wireguard/wg0/client1.conf -- 画像で保存 sudo qrencode -o client1.png -d 350 -r /etc/wireguard/wg0/client1.conf ** ログの出力 [#z93a070a] -[[参考サイト(WireGuardの接続・切断のログをファイルに出力させる手順):https://tech-mmmm.blogspot.com/2022/04/wireguard.html]] +[[参考サイト(WireGuardの接続・切断のログをファイルに出力させる手順):https://tech-mmmm.blogspot.com/2022/04/wireguard.html]] modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control -- crontab @reboot /usr/sbin/modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control -rsyslogにて/var/log/messagesに出力させる +rsyslogにて/var/log/messagesに出力させる -- vi /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none;kern.debug /var/log/messages +再起動時、自動実行 ++ sudo vi /etc/rc.local #!/bin/bash /usr/sbin/modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control ++ 実行権限追加 sudo chmod +x /etc/rc.local ++ 再起動して確認~ wireguard関連が「=p」になっていること~ 「[wireguard]wg_receive_handshake_packet =p」 cat /sys/kernel/debug/dynamic_debug/control | grep wire ** clientの設定 [#iaf906b9] *** iPhone, iPad [#vfd9d36f] +「App Store」から「wireguard」で検索、ダウンロード + 「WireGuard」アプリを起動し「+」を押す ++ファイルから --- セキュアなファイルサービスを使いましょう。~ 自分は自前のNextCloudサーバを使いました。 --- NextCloud -> ファイル -> 共有 -> WireGuardで設定ファイルをインポートできます ++QRコードから --- 上記のQRコードを読み込ませると設定は入るのですが、~ 設定名は手打ちしないといけないです。。。 +確認 -- 「Network Ping Lite」というアプリでLAN内の他のコンピュータへping確認しました。 -- IP address は、192.168.2.0/24 のIPになりますが、192.168.1.0/24のサブネットのコンピュータにpingが通るはずです。~ 通らない時は、「sudo vi /etc/wireguard/wg0.conf」、「table = off」をチェック。 *** Android [#z5f7ecb0] +「Play ストア」から「wireguard」で検索。インストール。 +自分はNextCloudからファイルを読み込みます。~ wireguardのアプリから「+」->「ファイル、アーカイブからインポート」->「NextCloud」の中のファイルを選択してインポート。 +VPNの設定名は15文字位までなので注意 *** Windows [#qca6a917] +ダウンロードリンク:[[(公式)Installation:https://www.wireguard.com/install/]] +「トンネルの追加」->「空のトンネルを追加」 +「名前」の入力。クライアント設定の文言(クライアント側の設定ファイルの内容)を記載して「保存」ボタンを押す。 + テザリングなどでインターネット回線にする。 + 接続してLAN(192.168.1.0/24)の他のコンピュータにpingが通ることを確認 *** Linux(Ubuntu) [#s76958ab] + WireGuard のインストール sudo apt install wireguard + クライアント設定ファイルの作成 -- sudo vi /etc/wireguard/wg0.conf [Interface] #上記の client0.key の値を設定 PrivateKey = abcdef= #クライアントがVPNで接続した際、VPNサーバから割り当てられるIPアドレスを記載。 #上記の peer の設定を合わせておく必要がある Address = 192.168.2.201/32 #DNSの設定とsearch domainの設定。カンマ区切り。自分の好みに書き換えて設定しましょう DNS = 8.8.8.8, 8.8.4.4, searchDomain.com [Peer] #上記の server.pub の内容を記載 PublicKey = abcdef= #client0-preshared.key の内容を記載 PresharedKey = abcdef= AllowedIPs = 0.0.0.0/0 #接続先のサーバー名を入れましょう #(インターネット越しでアクセスするので、変動IPの場合はDDNSなどのドメイン名を入れます) Endpoint = serverName.domain.com:51820 + 接続スクリプトの作成 -- vi ~/wgup.sh sudo /usr/bin/wg-quick up wg0 --- 実行権限の付与 sudo chmod +x ~/wgup.sh + 切断スクリプトの作成 -- vi ~/wgdown.sh sudo /usr/bin/wg-quick down wg0 --- 実行権限の付与 sudo chmod +x ~/wgup.sh + 接続 ~/wgup.sh + 切断 ~/wgdown.sh * 過去ログ [#t74b739c] ** ipsec の確認 ipsec verify [#f1a8b37f] - ipsec verify - うちの結果はこんな感じです(^^) Verifying installed system and configuration files Version check and ipsec on-path [OK] Libreswan 3.7 (netkey) on 2.6.32-431.3.1.el6.i686 Checking for IPsec support in kernel [OK] NETKEY: Testing XFRM related proc values ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK] Pluto ipsec.conf syntax [OK] Hardware random device [N/A] Two or more interfaces found, checking IP forwarding [OK] Checking rp_filter [ENABLED] /proc/sys/net/ipv4/conf/default/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/lo/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/ppp0/rp_filter [ENABLED] rp_filter is not fully aware of IPsec and should be disabled Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for IKE/NAT-T on udp 4500 [OK] Pluto ipsec.secret syntax [OK] Checking NAT and MASQUERADEing [TEST INCOMPLETE] Checking 'ip' command [OK] Checking 'iptables' command [OK] Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options [OK] Opportunistic Encryption [DISABLED] ipsec verify: encountered 9 errors - see 'man ipsec_verify' for help - うちの結果はこんな感じ(^^) Verifying installed system and configuration files Version check and ipsec on-path [OK] Libreswan 3.7 (netkey) on 2.6.32-431.3.1.el6.i686 Checking for IPsec support in kernel [OK] NETKEY: Testing XFRM related proc values ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK] Pluto ipsec.conf syntax [OK] Hardware random device [N/A] Two or more interfaces found, checking IP forwarding [OK] Checking rp_filter [ENABLED] /proc/sys/net/ipv4/conf/default/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/lo/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED] /proc/sys/net/ipv4/conf/ppp0/rp_filter [ENABLED] rp_filter is not fully aware of IPsec and should be disabled Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for IKE/NAT-T on udp 4500 [OK] Pluto ipsec.secret syntax [OK] Checking NAT and MASQUERADEing [TEST INCOMPLETE] Checking 'ip' command [OK] Checking 'iptables' command [OK] Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options [OK] Opportunistic Encryption [DISABLED] ipsec verify: encountered 9 errors - see 'man ipsec_verify' for help