블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.2
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

공지사항

태그목록

최근에 올라온 글

CZNIC 라는 체코 회사에서 만든 Turris Omnia, 오픈소스 OpenWRT 기반으로 만들어진 매우 훌륭한 라우터이지만, 이미 몇 년전에 회사가 망했는지? 더이상 업데이트도 안되고 있어서, 결국 OpenWRT 펌웨어로 바꿔서 사용해야 한다.

https://openwrt.org/toh/turris/turris_omnia

 

[OpenWrt Wiki] Turris CZ.NIC Omnia

U-Boot 2015.10-rc2 (Aug 18 2016 - 20:43:35 +0200), Build: jenkins-omnia-master-23 SoC: MV88F6820-A0 Watchdog enabled I2C: ready SPI: ready DRAM: 2 GiB (ECC not enabled) Enabling Armada 385 watchdog. Disabling MCU startup watchdog. Regdomain set to ** MMC:

openwrt.org

 

0. 먼저 해당장비의 U-Boot를 업데이트 해줘야 한다.

Update U-Boot if needed

Log into the factory OS (TurrisOS), and take note of the U-Boot version installed on your device: strings /dev/mtd0 | grep “U-Boot 20”. Alternatively, watch the serial console when booting.

Only if you have a very old Turris Omnia with U-Boot 2015.10-rc2:

  1. Make sure that you are running TurrisOS >= 5.2, and install the turris-nor-update package.
  2. Execute nor-update, to bring U-Boot to a more recent version (which supports OpenWrt's boot script).
  3. After rebooting, check the U-Boot version again. It should be at least U-Boot 2019.07.

https://repo.turris.cz/hbs/medkit/omnia-medkit-latest.tar.gz

 

※ Omnia 복구모드 설명 

https://docs.turris.cz/hw/omnia/rescue-modes/

 

1. USB를 이용한 Stock 펌웨어 복구 모드 

https://www.youtube.com/watch?v=ZrWzpsxqaRU

 

가장 최신?의 Stock 펌웨어 omnia-medkit-latest.tar.gz 파일을 FAT32로 포맷된 USB 장치의 root 영역에 복사한 다음,

장비의 USB 포트에 꽂고나서, 위 복구 동영상과 같이, 장비 후면의 reset 버튼을 길게 누르고, 전면 LED가 4개 켜지는 순간( LED 숫자 2 까지 불이 켜지면,) reset 버튼에서 손을 뗀다. 그럼 USB 장치에 있는 펌웨어로 장비가 자동으로 복구된다.

 

2. Rescue Shell 모드를 이용한 OpenWRT 펌웨어 설치

https://downloads.openwrt.org/releases/23.05.2/targets/mvebu/cortexa9/openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img.gz

1) 상위와 같은 최신 버전의 펌웨어 파일을 컴퓨터로 다운로드한다. 그리고, 해당 파일을 gunzip으로 압축을 풀어서, openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img 파일로 만듭니다.

2) img 파일을 FAT32로 포맷된 USB 장치의 root 영역에 복사한 다음, 장비의 USB 포트에 꽂고나서, 장비 후면의 reset 버튼을 길게 누르고, 전면 LED가 5개 켜지는 순간( LED 숫자 3 까지 불이 켜지면,) reset 버튼에서 손을 뗀다.

3) 장비가 2) 과정에 의해 rescue shell 모드가 되면, 노트북의 IP를 192.168.1.2/24로 설정하고, 장비에 192.168.1.1 로 접속한다. 이때, 반드시 랜 케이블은 장비의 LAN 포트 4번에 연결하여야 한다. (※ 다른 포트에 연결하면 안된다!!)

ssh root@192.168.1.1  명령어로 접속할때, 키 교환 에러가 발생하면,

ssh -v -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1

명령어로 접속하면 된다.

4) rescue shell로 접속하면, 아래 명령어로 먼저 usb 장치를 마운트한다.

mkdir mnt

mount /dev/sda1 /mnt

5) 다음 명령어로 OpenWRT 펌웨어를 설치한다.

dd if=/mnt/openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img of=/dev/mmcblk0 bs=4096 conv=fsync

Posted by 훅크선장
, |

WireGuard Installation on OpenWRT 23.05.2

2024년 2월 현재, 인터넷 상에서 다양한 설치 글이 존재하나, 직접 실습해보고 검증해본 결과 아주 조금씩 놓치는 부분들이 있어서,

내 상황에 맞게 수정해서 다음과 같이 정리했습니다.

참고할만한 동영상 및 정보 : https://www.youtube.com/watch?v=6NIJcsJsRaM

 

1. 소프트웨어 설치
opkg update
opkg install luci-proto-wireguard wireguard-tools luci-app-wireguard qrencode
/etc/init.d/network restart

혹은 LuCI → System → Software에 접속하여 반드시 관리도구: 하단 “Update lists...” 버튼을 클릭하여 패키지 목록을 가져온 다음, 
위의 네 개 패키지를 찾아 설치한다. 
그 후 LuCI → System → Startup → Initscripts → network에서 restart를 누른다.

2. Wireguard 인터페이스 생성
LuCI → Network → Interfaces에서 "새로운 인터페이스 추가..."을 클릭한다.

이름: wg0 (인터페이스명을 지정할때, 일반적인 디바이스명 규칙을 따른 것인데, wireguard, vpn 등 원하는 이름을 넣으면 된다.)
protocol: WireGuard VPN
private key: 
public key: 
(키쌍은 "Generate new key pair" 버튼을 누르면 생성된다. 간편하게 생성하면 된다.)
listen port: 49152 (49152 ~ 65535 중에서 골라도 되고, 자기가 지정해도 된다. 방화벽을 열어줘야 하기 때문에, 적당한 포트를 골라서 사용한다. 다른 매뉴얼 등을 보면, 일반적으로 51820 포트번호를 사용하는 것 같다.)
ip addresses: 172.16.8.1/24 (해당 인터페이스에 할당할 IP이다. 사설 IP대역을 하나 지정하면 된다. 10.9.0.1/24, 192.168.253.1/24 등으로 설정하면 된다. 이 IP가 게이트웨이 역할을 하므로, Peer 설정할때, 해당 IP 대역을 기억하고 있어야 한다.)
※ 만약 접속할 Peer 가 여러 곳이라면, 반드시 IP 주소를 여러 개로 나누어 등록해야 한다. 172.16.8.1/24 에 Peer 첫번째, 172.27.10.1/24 에 Peer 두번째 이런 식으로, 다른 Peer들끼리 같은 IP를 사용하면, 두번째 접속하는 Peer는 통신이 안된다!! 네트워크 라우팅 충돌이 발생하므로! 주의!!!

※ Peer 개수가 여러개 라면, 172.16.8.1/24 가 아닌, 172.16.8.1/32 와 같이 Host IP 주소로 딱 지정해주는 것도 좋은 방법이다.
고급설정 탭으로 이동해서, MTU를 1412로 설정해준다.

Peers 탭으로 이동해서, 연결되는 Peer 혹은 클라이언트를 설정한다.
먼저 “피어 추가” 버튼을 눌러준다. 그리고 다음과 같이 입력한다.
설명 : My Peer (접속대상에 대한 이름을 적당하게 지정해준다. Client01 등과 같이 임의로 정해준다.)
공개 키: 
private key: 
(키쌍은 "Generate new key pair" 버튼을 누르면 생성된다. 간편하게 생성하면 된다.)
Preshared Key: 꼭 사용할 필요가 없다.
Allowed IPs: 172.16.8.2/24(현재 설정하는 피어(클라이언트)가 Wireguard VPN 터널 안에서 쓰도록 허용한 IP 대역이다. 앞의 서버 측 설정할 때 사용했던 IP 대역과 특정 IP 하나를 지정해서 써주면 된다.)
※ 만약 접속할 Peer 가 여러 곳이라면, 반드시 IP 주소를 여러 개로 나누어 등록해야 한다. 172.16.8.2/24 에 Peer 첫번째, 172.27.10.2/24 에 Peer 두번째 이런 식으로, 다른 Peer들끼리 같은 IP를 사용하면, 두번째 접속하는 Peer는 통신이 안된다!! 네트워크 라우팅 충돌이 발생하므로! 주의!!!

※ Peer 개수가 여러개 라면, 172.16.8.2/24 가 아닌, 172.16.8.2/32 와 같이 Host IP 주소로 딱 지정해주는 것도 좋은 방법이다.

Route Allowed IPs : 꼭 체크해준다.
Endpoint Host: XXX.XXX.XXX.XXX (반드시 서버측의 wan IP 주소 혹은 도메인명을 적어준다. 현재 설정하고 있는 OpenWRT 공유기의 WAN 인터넷 공인 IP 주소가 입력되어야 한다.)
Endpoint Port: 49152 (앞의 Wireguard 인터페이스에서 지정한 listen port에 지정했던 포트 번호를 넣는다.)

※ 공인IP 주소를 가지지 않는 클라이언트 접속이므로, Endpoint 2개 항목은 입력할 필요가 없다.
Persistent Keep Alive: 25 (일종의 권장값이다. NAT 환경 등에서 접속을 유지하기 위해서 사용하는 값이다.)

입력이 완료되면, Configuration Export 옆의 "Generate configuration..." 버튼을 누르면, 현재 Peer(클라이언트)의 설정을 볼 수 있다.
설정파일의 내용을 가져다가, Peer(클라이언트)의 설정에 사용할 수 있다. 
QR Code를 가지고, 모바일 디바이스에 바로 Peer(클라이언트) 설정을 편하게 입력할 수 있다.

이상의 내용은 SSH 접속을 통하여, 직접 설정 파일을 가지고 만들어 낼 수도 있다. 
/etc/config/network 파일을 편집하여서 할 수도 있다. 아래처럼 추가하면 된다.

config interface 'wg0'
    option proto 'wireguard'
    option private_key '[비밀키 내용 입력]'
    option listen_port '49152'
    list addresses '172.16.8.1/24'
    option mtu '1412'

config wireguard_wg0
    option description 'My Peer'
    option public_key '[공개키 내용 입력]'
    option private_key '[비밀키 내용 입력]'
    list allowed_ips '172.16.8.0/24'
    option route_allowed_ips '1'
    option endpoint_host 'XXX.XXX.XXX.XXX'
    option endpoint_port '49152'
    option persistent_keepalive '25'


생성된 Peer(클라이언트)의 설정파일은 다음과 같다.

[Interface]
PrivateKey = [비밀키 내용 입력]
Address = 172.16.8.2/24
ListenPort = 49152
DNS = 192.168.xxx.1 (서버측 공유기의 LAN IP 주소가 DNS를 담당한다.)

[Peer]
PublicKey = 공개키 내용 입력]
# PresharedKey not used
AllowedIPs = 0.0.0.0/0, ::/0 (AllowedIPs는 VPN을 거칠 IP를 의미한다. 0.0.0.0/0으로 되어있다면 모든 접속을 VPN을 거쳐서 하게 된다.)
Endpoint = XXX.XXX.XXX.XXX:49152
PersistentKeepAlive = 25

3. 방화벽 Zone 설정
공유기 내부의 방화벽을 VPN이 사용할 수 있도록 열어주어야 한다.
LuCI → Network → Firewall에서 설정 할 수 있다. 
General Settings 탭에서 Zones 하단에 “Add”를 눌러 새로운 Zone을 만든다.

Name: wg0_vpn (원하는 이름으로 선정한다. wireguard, myvpn 등을 사용할 수도 있다.)
Input: Accept
Output: Accept
Forward: Reject
Masquerading: 체크 (VPN 네트워크에서 다른 영역으로 통신을 하려면, 반드시 필요)
MSS clamping: 체크 (VPN 네트워크에서 다른 영역으로 통신을 하려면, 반드시 필요)
Covered Networks: wg0 (이전 인터페이스쪽에서 새로 생성한 인터페이스 명칭을 찾아서 지정한다.)
Allow forward to destination zones: VPN Zone에서 다른 Zone으로 접속을 허용하는 곳으로, LAN 영역과 WAN 영역을 접근하기 위해서는 lan과 wan을 모두 선택해서 지정한다. 네트워크 구성에 따라 lan과 wan을 하나씩만 선택할 수 있으나, 일반적으로는 lan과 wan 모두를 선택하는 것이 좋다.
Allow forward to source zones: 다른 Zone에서 VPN Zone으로 접근을 허용하는 것인데, 정말 특별한 경우가 아니면, lan만 선택한다.

이 작업은 /etc/config/firewall을 수정하여서 할 수도 있다.
config zone
    option name 'wg0_vpn'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'
    list network 'wg0'

config forwarding
    option src 'wg0_vpn'
    option dest 'lan'

config forwarding
    option src 'wg0_vpn'
    option dest 'wan'

config forwarding
    option src 'lan'
    option dest 'wg0_vpn'

4. 방화벽 Traffic Rule 설정

이제 서버측의 접속 포트 Listen Port를 열어준다.

Traffic Rules 탭에 들어가 “Add”를 누른다.

Name: Allow-Wireguard (기본적으로 사용된는 작명 규칙에 맞게 Allow-Wireguard로 한다.)
Protocol: UDP (Wireguard VPN은 UDP만을 사용하므로, 기본 설정된 TCP는 제거하고,UDP 하나만 지정한다.
Source zone: wan (인터넷쪽 공유기의 외부에서의 접속이므로 wan을 지정한다.)
Destination port: 49152 (앞의 과정에서 지정했던 서버 포트번호 49152을 입력한다.)
Action: accept (포트 접속 허용 규칙이므로, accept를 지정한다.)

이 작업은 /etc/config/firewall을 수정하여서 할 수도 있다.

config rule
    option name 'Allow-Wireguard'
    list proto 'udp'
    option src 'wan'
    option dest_port '49152'
    option target 'ACCEPT'

5. 접속 테스트
클라이언트 쪽에 Wireguard 앱을 설치하고, 앞의 인터페이스 -> wg0 수정 -> Peers 수정 에 가면,
Configuration Export 옆의 "Generate configuration..." 버튼을 누르면, 현재 Peer(클라이언트)의 설정을 볼 수 있다.

Peer(클라이언트)의 설정파일 내용을 복사해서, PC에 설치한 Wireguard 앱의 새로운 Tunnel 설정으로 만들어서 사용할 수 있고,
또는 QR Code를 가지고, 모바일 디바이스에 바로 Peer(클라이언트) 설정을 편하게 입력할 수 있다.
접속을 활성화하면,
Luci에서 Status -> Wireguard 로 가보면, 접속 현황을 볼 수 있다.
※ logread -f 명령에 의한, 프로세스 접속로그는 나타나지 않는다. 커널 VPN이라서... OpenVPN은 이 명령어로 접속로그를 볼 수 있지만, Wireguard는 안된다.

6. 기기 재부팅
커널 VPN 이다보니, 설정 변경이나 Peer 추가 등의 작업 후에는 반드시 기기를 재부팅해야만 한다. 
매우 불편한 점이기는 하다~!

6. 인터페이스 재시작
네트워크 -> 인터페이스  로 가서, wg0 인터페이스를 재시작한다.

※ 재부팅을 해서, 커널을 다시 시작해야 한다고 하는 경우도 있다 한다. 인터페이스 재시작으로 vpn 터널이 활성화되지 않는다면, 기기 재부팅을 해보는 것도 방법이다. 

Posted by 훅크선장
, |

https://www.youtube.com/watch?v=ZS3vXA0s2qU 를 참고하여, 실습을 통해 검증해서 쓴 글입니다.

 

준비물: 2대의 OpenWRT 장치, TAP Client 장비는 VLAN 구성이 가능한 장비여야 편리하다.

1. TAP 서버 설정
패키지 설치 : openvpn-openssl openvpn-easy-rsa luci-app-openvpn
서버의 WAN IP 주소 : 10.0.0.2
서버의 LAN IP 주소 : 192.168.2.1

※ LAN 영역 DHCP Server 일반설정에서 시작 IP주소 끝자리를 100에서 10으로, 150을 20으로 줄여준다.
※ LAN 영역 DHCP Server 고급설정에서 Force 체크해준다!

방화벽 설정에서 OpenVPN 서버가 사용할 포트를 열어준다.
config rule
    option name 'Allow-OpenVPN'
    list proto 'udp'
    option src 'wan'
    option dest_port '1194'
    option target 'ACCEPT'

서버와 클라이언트 인증서 파일들을 생성한다.
openvpn 서버 설정 파일을 입력한다.
필요한 파일은 dh2048.pem ca.crt server.crt server.key
option server_bridge 의 IP 주소 대역은 혼동되지 않는 것을 쓰면 된다.
192.168.50.x 쓰는 것도 좋지만, 구분되기 쉽게 172.16.8.x 대역을 써도 된다.

LAN 인터페이스의 브릿지 인터페이스 설정에 tap0를 추가해준다.(기존에 이미 lan과 wireless가 연결된 브릿지 인터페이스이다.)

2. TAP 클라이언트 설정
패키지 설치 : openvpn-openssl luci-app-openvpn
필요한 파일 : 
클라이언트의 WAN IP 주소 : 10.0.0.3
클라이언트의 LAN IP 주소 : 192.168.3.1
클라이언트의 VPN IP 주소 : 192.168.2.2

※ LAN 영역 DHCP Server 고급설정에서 Force 체크해준다!
※ 공유기를 설정하기 전에, 미리 포트 4번에 연결해야 한다! 왜냐하면, 포트 1번을 VPN에 할당해야 하기 때문에...
먼저 스위치 기능에서 VLAN 3 을 추가하고, 포트 LAN 1을 VLAN 3에만 가입시킨다. 
(tagged, off, untagged 를 아래와 같이 지정한다.)

VLAN ID    CPU(eth0)    LAN 1         LAN 2        LAN 3       LAN 4        WAN
      1             tagged         off              untagged untagged untagged   off
      2             tagged         off              off            off             off               untagged
      3             tagged         untagged  off            off             off               off

새로운 인터페이스 lanvpn을 생성하고, Static address, VLAN eth0.3 을 지정하고,
IP address는 192.168.2.2/24를 지정

방화벽 Zone 에 역시 lanvpn을 생성하고 Forward를 accept로 바꾸고, Covered networks에 lanvpn을 지정한다.
그리고, Allow forward to destination zones: 에 WAN을 추가한다.

openvpn 클라이언트 설정 파일을 입력한다.
필요한 파일은 3개뿐이다. ca.crt client.crt client.key
서버의 IP 또는 도메인 주소 그리고 포트번호만 잘 확인하면 된다.

openvpn 접속을 먼저 완료하고,
lanvpn 인터페이스에 할당된 디바이스를 Bridge Interfaces로 바꾼다. eth0.3 에 부가적으로 tap0 디바이스를 추가한다.
※ 최신버전 OpenWRT에서는 Bridge 디바이스를 아예 별도로 생성해야 한다.

LAN 1 포트에 연결하면, 바로 OpenVPN 서버의 LAN 영역 IP 192.168.2.x 할당받고, 접속가능하다.
대신 다른 클라이언트 영역에는 접근할 수가 없다. 192.168.3.x 접근 불가.

Posted by 훅크선장
, |