ラズパイをルーター化する（NAT超えWake on LAN[4]）

# はじめに
[前回](https://qiita.com/jjjkkkjjj/items/b8363536c488cf51d577)の続きです．
とりあえずやりたいことはこんなんです．

![network_detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253935/5834caa5-20e1-6878-79a1-01469d50525e.png)

今回は「ラズパイをルーター化する」です．


- [1][GCPとMyDNSを使って，ドメインを取得する](https://qiita.com/jjjkkkjjj/items/d0370573fcb04deeb91f)
- [2][GCPにSoftether Serverを立てる（iPhone／ラズパイから接続）](https://qiita.com/jjjkkkjjj/items/824998a6106eff941347)
- [3][GCP上のApacheからローカルのラズパイApacheにリバースプロキシする](https://qiita.com/jjjkkkjjj/items/b8363536c488cf51d577)
- [4][ラズパイをルーター化する](https://qiita.com/jjjkkkjjj/items/6f416f27eabbaf04979e)
- [5][Wake on LAN用のPythonスクリプトを作成する．](https://qiita.com/jjjkkkjjj/items/afa4fe637e2c6dae3ecf)


# 有線LANアダプタを買う
ラズパイには，LANポートは1つしかないので，有線LANアダプタを書います．[こんなやつ](https://www.yodobashi.com/product/100000001004167511/?gad1=&gad2=g&gad3=&gad4=56278881131&gad5=10353996729803898351&gad6=&gclid=Cj0KCQjwn7j2BRDrARIsAHJkxmwUpNCdsjugPwEwUWH1YIaE7tssA-1-k60FQZYdo-zVAOeoNwEakQUaAr9KEALw_wcB&xfr=pla)．

# 新しいEthernetに固定IPアドレスを割り当てる
`ip a`コマンド（`sudo ifconfig`）で確認すると新たなEthernet　Ineterfaceが追加されているはずです．今回は`eth1`という名前でした．

```bash
$ sudo ifconfig # ip a の方がいいっぽいです
eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 04:ab:18:3b:af:e2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

固定IPを割り当てます．今回は，下図のようにラズパイをルーター※として，新たなネットワーク(`192.168.1.0/24`)を作りたいので，

![network](https://camo.qiitausercontent.com/6b1b5824380477c6ced1d5f5428000024da141c2/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3235333933352f35383334636161352d323065312d363837382d373961312d3031343639643530353235652e706e67)

```bash
sudo vi /etc/dhcpcd.conf
```

以下を追記します．

```bash:/etc/dhcpcd.conf
# External ethernet
interface eth1
static ip_address=192.168.1.1/24 # you can assign arbitrary ip address and subnet mask. Note that client must designate this address as gateway
static routers=**.**.**.** # you can assign arbitrary ip too. if this server's network is from another router, set routers address may be better.(you will not need to set dns masquerade)
static domain_name_servers=8.8.8.8 # see above line's comment
```

※ルーター化と言っていましたが，実はIPマスカレードするだけでした．
↑の`**.**.**.**`にルーターのアドレス，dnsアドレスにGoogleのPublicアドレスを入れています．（もはやルーターではないかもしれませんね．．．詳しくないのでわかりません笑）
※ラズパイに完全にルーター機能を付与する場合は`**.**.**.**`にも任意のアドレスを割り当て，dnsアドレスはコメントアウトすべき？．そして，参考にあるようにDNSマスカレードとDHCPサーバーの設定を行うといいのですかね．．．

## 確認
ラズパイに繋いだデスクトップPCの電源を入れて，ipを確認すると，`eth1`にIPが割り当てられます．
※デスクトップPCはまだインターネットに繋がりません．

```bash
sudo ifconfig # or ip a
# eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
#         inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
#         ether **:**:**:**:**:**  txqueuelen 1000  (Ethernet)
#         RX packets 0  bytes 0 (0.0 B)
#         RX errors 0  dropped 0  overruns 0  frame 0
#         TX packets 0  bytes 0 (0.0 B)
#         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ping 192.168.1.**
```

# IPマスカレードの設定
IPマスカレードの設定をします．
1行目：プライベートIPアドレス空間から-oへの転送許可．
2行目：SNAT．
3行目：DNAT．

```bash
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # SNAT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # DNAT
```

このままだと一時的で，再起動すると情報が消えてしまうので，

```bash
mkdir ~/iptable && cd ~/iptable
sudo iptables-save > iptables.dat
sudo vi /etc/rc.local 
```

```bash:/etc/rc.local
# iptables
iptables-restore < /home/{user name}/iptable/iptables.dat
```

これで，デスクトップPCがインターネットに繋がるはずです．


# 参考
[Ubuntu 16.04 でルータつくる](https://qiita.com/nanbuwks/items/fe8145fc8b989be9d427)
[Ubuntu 18.04LTS で NAT ルータを構築](http://yjo-blog.blogspot.com/2018/12/ubuntu-1804lts-nat.html)
[Linuxマシンをルータにする方法](http://redhatlinux.kt.fc2.com/cont/router.htm)
[手元のUbuntuにUSB-LANアダプタを追加してルータ化する](http://3116pitchdarktech.hatenadiary.jp/entry/2018/01/12/192412)
[Ubuntu PCをルータ代わりにして、新しくLANを構築してみる](https://www.clear-code.com/blog/2010/11/19.html)
[How to Setup a Raspberry Pi DNS Server](https://pimylifeup.com/raspberry-pi-dns-server/)
[Raspberry PiにDnsmasqをインストールする](https://qiita.com/locatw/items/8d801c4dafccfd5f0424)