로봇 시스템의 경우, 내부망과 외부로 연결하기 위한 인터넷망을 분리하여 설계하는 경우가 있습니다. 내부 기기들은 로컬망으로, 로봇을 원격으로 접속하기 위한 인터넷망을 따로 두는 경우인데, 보통 2개 이상의 디바이스 or PC가 들어가는 경우입니다. 대략 그림으로 설명해보면,

이렇게 되어 있을 경우, PC2에서는 인터넷망에 접속이 불가능하므로 외부망으로 연결이 되지 않습니다. 패키지를 설치하거나 할 경우에 약간 불편한 경우가 발생하는데, iptables를 이용해서 PC2에서 PC1을 통해 인터넷망이 접속 가능하도록 설정할 수 있습니다.
일단 PC1에서 필요한 패키지를 설치합니다.
$ sudo apt install iptables iptables-persistent
또, IP 포워드 기능이 활성화되어 있는지 확인합니다.
$ sudo vi /etc/sysctrl.conf
# 28th line uncomment
net.ipv4.ip_forward=1
다음으로 iptables를 설정합니다. 네트워크 인터페이스 이름은 위 그림을 기준으로 하겠습니다. (사용자 환경에 따라 변경하여 쓰시면 됩니다)
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
이제 이걸 영구적으로 저장하고, 다음 부팅 후에도 사용하도록 설정합니다.
$ sudo netfilter-persistent save
$ sudo netfilter-persistent reload
이제 PC1에서의 작업은 끝났습니다.
다음으로 PC2에서는 IP 설정만 다시 해주면 됩니다. 먼저 현재 저장된 설정 이름을 확인해봅니다.
$ nmcli connection show
NAME UUID TYPE DEVICE
Wired connection 1 fb960c33-6436-3331-b11b-174bfebacc62 ethernet eth0
docker0 311a9d66-a3fe-4aeb-ac9c-665beb0a7e1f bridge docker0
저의 경우엔 “Wired connection 1″으로 되어 있습니다.
이제 IP 설정을 해줍니다.
$ sudo nmcli con modify "Wired connection 1" ipv4.addresses 10.0.0.11/24
$ sudo nmcli con modify "Wired connection 1" ipv4.gateway 10.0.0.10
$ sudo nmcli con modify "Wired connection 1" ipv4.dns 8.8.8.8
$ sudo nmcli con modify "Wired connection 1" ipv4.method manual
$ sudo nmcli con up "Wired connection 1"
이제 연결을 테스트 해보면…
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=43.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=41.3 ms
외부망으로 연결이 잘 되는 것을 확인할 수 있습니다.
끝.
Leave a Reply