---
# System prepended metadata

title: 雲端通訊整合實務(9/15)
tags: [docker, docker-compose]

---

# 雲端通訊整合實務(9/15)
###### tags: `docker`、`docker-compose`
# 上課所需
> VM1:
> NAT(enp0s3)
> Host-Only(enp0s8)
> 內部網路(enp0s9)

> VM2:
> 內部網路(enp0s3)


# 實驗環境
![](https://i.imgur.com/9ceGHOQ.png)

# VM1設定

ip(內部網路) 設置
```
ip addr add 192.168.1.1/24 brd + dev enp0s9
```

將第一台vm設置成router
```
echo 1 > /proc/sys/net/ipv4/ip_forward
```


> 查看vm是否已設置成router可使用：
```
cat /proc/sys/net/ipv4/ip_forward
```

**iptables的設定需要先配置好第二台VM，請先將第二台設定好在接著步驟。**

# VM2設定

ip(內部網路) 設置
```
ip addr add 192.168.1.2/24 brd + dev enp0s3
```

ip route 路由規則設定
```
ip route add default via 192.168.1.1
```
> 查看路由規則表可使用：
```
ip route show
```


# 測試1
讓VM2透過VM1的網卡連到外網的前置設定
```
iptables -A FORWARD -o enp0s3 -i enp0s9 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
```

```
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
```

```
iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.1.0/24 -j MASQUERADE
```

**做完以上步驟後可以先測試以下幾點來確認上面步驟可否成功:**
1. VM2 ping VM1
2. VM1 ping VM2
3. VM2 ping 外網

# Docker 設定

**請在VM1環境安裝docker、docker-compose**

安裝docker可參考：https://docs.docker.com/engine/install/centos/
安裝docker-compose可參考：https://docs.docker.com/compose/install/

安裝完請開啟docker
```
systemctl start docker
```

dockerhub下載adguard官方鏡像，可參考：
https://hub.docker.com/r/adguard/adguardhome
```
docker pull adguard/adguardhome
```
> 若docker pull 不成功的話，原因是需要先登入dockerhub才可下載，因此可先使用：

```
docker login:[帳號]、[密碼]
```

接著創建指定的路徑，以便adguard來存放data

```
mkdir -p /my/own/workdir
mkdir -p /my/own/confdir
```

啟動adguard鏡像

```
docker run --name adguardhome -v /my/own/workdir:/opt/adguardhome/work -v /my/own/confdir:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome
```

> 若出現埠號佔用的報錯，例如:68埠、67埠、53埠，請先使用`docker ps -a`，將啟動的adguard容器砍掉，**刪除容器**可使用`docker rm -f [容器名稱]`，再執行：

查看埠號資訊
```
netstat -tunlp | grep 68
netstat -tunlp | grep 67
netstat -tunlp | grep 53
```
刪除佔用的埠
```
kill -9 [68埠的ID]
kill -9 [67埠的ID]
kill -9 [53埠的ID]
```

# 測試2

1. 測試adguard有無成功，請在網頁上測試：`VM1的本地ip:3000`

成功後會出現以下畫面：
![](https://i.imgur.com/Mo0CTVC.png)

2. 設定完成後，測試VM2是否可阻擋廣告

成功後會出現以下畫面：
![](https://i.imgur.com/iM3muqg.jpg)

## Reference
1. [上課影片](https://drive.google.com/drive/folders/1oM_ejAeSIhGbDGAVBDnVRv4DuoXaDwYw?usp=sharing)