티스토리 뷰

반응형

go-ipfs: 로컬 환경에서 IPFS Private 네트워크 실행

go-ipfs를 이용해 로컬 환경에서 IPFS Private 네트워크를 실행하는 방법에 대해 알아보겠습니다.


네트워크 환경 준비

두 대의 호스트(HOST1, HOST2)를 이용해 IPFS Private 네트워크를 실행하도록 하겠습니다.

테스트를 위해 두 대의 호스트에 각각 IPFS를 설치합니다.

IPFS 네트워크 설치에 대한 기본 내용은 다음 글을 참조하시기 바랍니다.

[IPFS] go-ipfs: 로컬 환경에서 IPFS 네트워크 실행


IPFS Swarm Key 생성

IPFS Private 네트워크를 실행하기 위해서는 IPFS Swarm Key가 필요합니다. Swarm Key는 private 네트워크를 구성할 peer들 사이에 공유되어야 하는 private key를 의미합니다. 동일한 Swarm Key를 가진 peer들이 하나의 IPFS Private 네트워크를 구성합니다.

이 단계는 한 대의 호스트에서만 진행하면 됩니다. 여기에서는 HOST1에서 실행합니다.


swarm-key-gen 다운로드(HOST1에서 실행)

Swarm Key를 생성해주는 swarm-key-gen을 다운로드합니다.

cd /opt/gopath/src/github.com/ipfs

# swarm-key-gen 다운로드
git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git
cd go-ipfs-swarm-key-gen
go build ipfs-swarm-key-gen/main.go


Swarm Key 생성(HOST1에서 실행)

이제 다음 명령을 통해 Swarm Key를 생성합니다.

# Swarm Key 생성
./main > ~/.ipfs/swarm.key
cat ~/.ipfs/swarm.key


위 명령의 실행 결과로 출력된 Swarm Key 값을 복사해둡니다.

※ 출력된 세 줄 모두 복사해야합니다!!


Swarm Key 복사(HOST2에서 실행)

HOST1에서 생성해 복사해 둔 Swarm Key 값을 HOST2에도 적용시켜줍니다.

HOST1HOST2에서 동일한 Swarm Key 값을 가지고 있어야 IPFS Private 네트워크를 실행할 수 있습니다.

# Swarm Key 복사
vi ~/.ipfs/swarm.key
/key/swarm/psk/1.0.0/
/base16/
6fdf6c932b22deef933bef0c87f3e565ea54058b355c5c3c2818f2656118901c


IPFS 실행

이 단계는 각 호스트에서 모두 실행해주어야 합니다.


IPFS 데몬 실행

이제, 각 호스트에서 IPFS 데몬을 실행합니다.

# IPFS 데몬 실행
ipfs daemon


연결된 peer 확인(HOST1, HOST2에서 실행)

새로운 터미널 창을 켜고 IPFS에 연결된 peer들을 확인합니다.

# 연결된 peer 확인
ipfs bootstrap list


만약 한 개의 peer라도 연결이 되어있는 경우에는 다음 명령을 실행해 연결된 모든 피어를 삭제합니다.

# 연결된 모든 peer 삭제
ipfs bootstrap rm --all


연결된 모든 peer가 삭제되었는지 확인합니다.

# 연결된 모든 peer 삭제 재확인
ipfs bootstrap list


config 파일 수정(HOST1, HOST2에서 실행)

config 파일을 출력해보면 Addresses 부분에 APIGateway가 다음과 같이 설정되어 있는 것을 확인할 수 있습니다.

# IPFS 구성 파일 확인
ipfs config show
  "Addresses": {
    "API": "/ip4/127.0.0.1/tcp/5001",
    "Announce": [],
    "Gateway": "/ip4/127.0.0.1/tcp/8080",
    "NoAnnounce": [],
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4001",
      "/ip6/::/tcp/4001"
    ]
  }

이제 이 APIGateway의 주소에서 127.0.0.10.0.0.0으로 변경합니다.

0.0.0.0은 IPv4 패킷을 전송하고자 하는 컴퓨터가 자신의 IP주소를 모르는 경우 통신을 하기 위해 사용됩니다. 보통 자신의 IP주소를 모르는 컴퓨터는 부트스트랩(컴퓨터의 전원을 킬 때나 재부팅할 때)이 진행되는 도중에 위 주소를 사용합니다.

이 신호를 보낸 컴퓨터는 자신의 주소를 알기 위해 이 주소를 발신지 주소로 설정하고 목적지 주소로 255.255.255.255로 설정한 IP 패킷을 DHCP서버로 전송합니다. DHCP서버는 신호를 받은 후 해당 PC에 IP 주소를 알려주며 PC는 해당 주소를 자신의 IP 주소로 사용합니다.

# config 파일 수정
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080


Libp2p는 개인 네트워크와 같은 연결 보호를 지원합니다. 환경 변수 LIBP2P_FORCE_PNET=1을 설정하여 네트워크 보호를 강화합니다. 이 변수가 켜져 있으면 options.connProtector를 통해 보호 기능을 설정하지 않으면 Libp2p가 생성시 오류가 발생합니다.

# 환경변수 설정
export LIBP2P_FORCE_PNET=1


IPFS 데몬 재실행(HOST1, HOST2에서 실행)

이제 실행중인 IPFS 데몬을 ctrl + C로 중지하고 다시 시작합니다.

# IPFS 데몬 재실행
ipfs daemon


peer 연결

IP 주소 확인(HOST1에서 실행)

HOST1에서 ifconfig 명령을 실행해 자신의 IP 주소를 확인합니다. ens33inet addr에 출력되는 IP가 자신의 IP 주소입니다.

# IP 주소 확인
ifconfig ens33


IPFS ID 확인(HOST1에서 실행)

HOST1에서 IPFS의 ID 정보를 확인합니다.

#IPFS ID 확인
ipfs id

'ipfs id' 명령으로 출력된 Addresses 중에서 'ifconfig ens33' 명령으로 출력된 ens33inet addr 값이 포함된 Address를 복사합니다.

/ip4/<HOST1의 IP 주소>/tcp/4001/ipfs/QmTGksHmMkiLrvSXYTExiL7HFKfDxvNcTQAnJJFegGNLrR

IPFS에 부트스트랩 peer 추가(HOST2에서 실행)

HOST1에서 복사한 Address 값을 IPFS 부트스트랩 peer 목록에 추가합니다.

# IPFS에 부트스트랩 peer 추가
ipfs bootstrap add /ip4/<HOST1의 IP 주소>/tcp/4001/ipfs/QmTGksHmMkiLrvSXYTExiL7HFKfDxvNcTQAnJJFegGNLrR


peer 연결 확인(HOST1, HOST2에서 실행)

이제 각 호스트에서 연결이 정상적으로 이루어졌는지 확인합니다.

# peer 연결 확인
ipfs swarm peers



파일 공유

IPFS Private 네트워크가 정상적으로 실행되었으니, 파일을 공유해보도록 하겠습니다.

파일 추가(HOST1에서 실행)

HOST1에서 공유할 파일을 하나 만들어봅시다.

cd /opt/gopath/src/github.com/ipfs/go-ipfs

# 공유할 파일 생성
echo "IPFS P2P Private Network" > info.txt


그런 다음, IPFS에 해당 파일을 추가합니다.

# 파일 추가
ipfs add info.txt


ipfs add 명령의 실행 결과로 출력된 key를 복사해둡니다.


파일 확인(HOST2에서 실행)

위에서 복사한 key를 이용해 HOST2에서 파일을 확인해봅니다.

# 파일 확인
#ipfs cat <ipfs key>
ipfs cat Qmdxcn6oWAciMQxSTgL79pgYCSMj318zFxvkN8677A2bmZ


동일한 파일 내용이 출력되는 것을 확인할 수 있습니다.


파일 다운로드(HOST2에서 실행)

이제 파일을 다운로드 해봅니다.

# 파일 다운로드
#ipfs get <ipfs key>
ipfs get Qmdxcn6oWAciMQxSTgL79pgYCSMj318zFxvkN8677A2bmZ --output=info.txt


--output 옵션을 사용해 저장할 파일명을 지정할 수 있습니다. 별도로 지정하지 않은 경우에는 ipfs key 값으로 저장됩니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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 26 27
28 29 30
글 보관함