[라즈베리파이] IP Forwarding 해보기 Computer Tip

지난번 설치한 PI3 모델B에다가
USB2 Ethernet 어답터로 다른 IP를 할당해 보았습니다.

다음과 같이 eth0, eth1 이 설정되어 있습니다.

pi@raspberrypi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:38:fa:27  
          inet addr:10.31.1.75  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::6d14:36e1:9625:9a8f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43480 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2668 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4593456 (4.3 MiB)  TX bytes:369381 (360.7 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0e:c6:fa:78:b0  
          inet addr:192.168.100.100  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::494a:8246:378d:8278/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:264 errors:0 dropped:0 overruns:0 frame:0
          TX packets:438 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19971 (19.5 KiB)  TX bytes:30830 (30.1 KiB)

이 설정은 /etc/dhcpcd.conf 에 있습니다.

$ cat /etc/dhcpcd.conf 
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
...
interface eth0
static ip_address=10.31.1.75/8
static routers=10.31.0.1
static domain_name_servers=168.126.63.1

interface eth1
static ip_address=192.168.100.100/24

그런데 문제는 10.0.0.0/8 망에서 192.168.100.0/24 망으로 패킷을 포워딩 하고 싶어

$ sudo vi /etc/sysctl.conf 
...
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

라고 하고 reboot을 해도 패킷 포워딩이 안되는 것이었습니다.

결국 찾아 보다가 어느 문답을 보고 해결하였습니다.

다음과 같이 하면 되었습니다.


1) /etc/sysctl.conf 에서 ​
net.ipv4.ip_forward=1 이라고 하고 reboot 합니다.

2) 방화벽 설정

2.1) Flush

$ sudo iptables -F
$ sudo iptables -X
$ sudo iptables -t nat -F
$ sudo iptables -t nat -X
$ sudo iptables -t mangle -F
$ sudo iptables -t mangle -X
$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -P FORWARD ACCEPT
$ sudo iptables -P OUTPUT ACCEPT

2.2) Masquerade 설정 (eth0 => eth1로 나갈경우)

$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

2.3) iptables 저장

$ sudo mkdir -p /etc/iptables
$ sudo iptables-save > /etc/iptables/rules.v4

복구는
$ sudo iptables-restore < /etc/iptables/rules.v4

라고 하면 됩니다.

TODO) 시스템 재기동 시 restore 방법이 필요합니다.

위의 문답 내용에서는 /etc/network/interfaces 에다

post-up iptables-restore < /etc/iptables/rules.v4     # The line you need to add
를 추가하면 된다고 하였으나, dhcpcd 데몬 문제로 해당 파일을 수행하지 않기 때문에

/etc/rc.local 의 마지막 
exit 0 전줄에

sudo iptables-restore < /etc/iptables/rules.v4     # The line you need to add
exit 0 ​

과 같이 주어 reboot 후에도 동작하도록 하였습니다.


2.4) 10.0.0.0 망의 윈도우나 맥에서 192.168.100.0 망으로 static routing 정보 설정

참고. 윈도우에서 특정 대상 주소 대역을 해당 라즈베리파이를 바라보도록 하는 설정
- 관리자모드로 명령창을 뛰워

ROUTE ADD 192.168.100.0 MASK 255.255.255.0 10.31.1.75 METRIC 1

라고 해 주면 됩니다.

혹은 맥을 사용하고 있다면,

sudo route add 192.168.100.0/24 10.31.1.75

라고 터미널에서 주면 됩니다.


어느분께는 도움이 되셨기를...

덧글

  • lotustone 2017/03/28 17:19 # 삭제 답글

    정확히 필요하던 내용이네요..감사합니다
  • 지훈현서아빠 2017/03/30 09:33 #

    도움이 되셨다면 저의 보람입니다.
댓글 입력 영역

구글애드텍스트