マンションなどの場合は、ポート開放できなかったりの制限があるので、一般的なルートで自宅サーバを公開することができないです。
ただ、以下のような構成にすることで間接的に自宅サーバを公開することができます
VPNサーバでWebサーバを公開し、リバースプロキシして、内部のサーバにルーティングをします。
内部のサーバVPNクライアントとして、VPNサーバに接続することで、お互いに通信できるようにします。
まず、VPNサーバを構築します。
OpenVPNをインストール
有志の方が提供してくれているOpenVPNインストールスクリプトを実行します。
1 |
wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh -O openvpn-install.sh && bash openvpn-install.sh |
ipv6だけオフにしてます。
1194ポートを解放します。
1 2 3 |
firewall-cmd --add-port=1194/udp --permanent sudo firewall-cmd --zone=public --permanent --add-masquerade firewall-cmd --reload |
ovpnファイルが/rootにできていると思うので、それを回収します。
duplicate-cnは一つのプロファイルを複数クライアントで使いまわすことができる。厳密にいうと、秘密鍵を使いまわすことを許容するというもの。
client-to-clientは、通常はクライアントからサーバへの通信のみだけれど、その逆も許可するというもの。今回の設定では必要。
/etc/openvpn/server.conf
1 2 |
duplicate-cn client-to-client |
リバースプロキシとしてNginxをインストールします。
1 2 |
dnf -y install nginx dnf -y install nginx-mod-stream |
/etc/nginx/nginx.confに追記します。
upstreamで指定するサーバは内部サーバのIPを指定する。
1 2 3 4 5 6 7 8 9 10 |
stream { upstream naibuserver { server 10.8.0.2:80; } server { listen 0.0.0.0:8080; proxy_pass naibuserver; } } |
続いて、内部サーバを作ります。
openvpnclientをインストール
1 2 |
dnf -y install epel-relase dnf -y install --enablerepo=epel openvpn |
VPNサーバに接続
1 |
openvpn ./Vamdemic.ovpn |
ipアドレスを確認すると、tun0というネットワークインターフェースが登場しているはず。
この状態であればVPN接続OK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@compute2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:0b:b3:0e brd ff:ff:ff:ff:ff:ff inet 192.168.50.173/24 brd 192.168.50.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000 link/ether 00:15:5d:0b:b3:0f brd ff:ff:ff:ff:ff:ff 4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 6e:60:35:cb:65:70 brd ff:ff:ff:ff:ff:ff 5: br-eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:15:5d:0b:b3:0f brd ff:ff:ff:ff:ff:ff 6: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 76:33:9b:98:cb:47 brd ff:ff:ff:ff:ff:ff 15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet 10.8.0.2/24 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::505b:9b2f:2cf4:d0f5/64 scope link stable-privacy valid_lft forever preferred_lft forever |
テスト用にhttpdをインストール
1 2 |
dnf -y install httpd systemctl stop firewalld |
VPNサーバのIP:8080にアクセスすると、ApacheのWelcomeページが表示されるはず。