[카테고리:] 컴퓨터 관련

  • 아이폰 핫스팟 제한 우회하기

    요즘 따라 데이터를 많이 사용해 요금제를 무제한 요금제로 바꿨다.

    그런데 이 무제한이 완전한 무제한이라고 써져 있는데 완전 무제한이 아니다.

    테더링이나 핫스팟을 사용하면 사용량을 측정해서 공유데이터에 반영이 되고 이 공유 데이터를 다 쓰면 핫스팟을 사용할 수가 없다.

    그래서 핫스팟 제한을 우회하려고 찾아봤으나 웬만한 것들은 다 막혀 있다.

    그래서 인터넷을 더 찾아보다 보니까 아이폰에 프록시 서버를 만들어서 아이폰에서 접속하는 것처럼 만들면 핫스팟 제한을 우회할 수 있다는 것을 알게 되었다.

    nneonneo/iOS-SOCKS-Server: iOS HTTP/SOCKS proxy server for fake-tethering

    누군가가 이렇게 아이폰에서 프록시 서버를 만들 수 있게 해 두었다.

    나는 이걸 쓰기로 했다.

    문제는 이것을 쓰려면 파이썬을 실행할 수 있는 앱이 필요한데 이 앱이 유료다.

    Pythonista 3 on the App Store

    14,000원이나 한다마는 값어치는 있다고 생각했다.

    우선 저 GitHub 페이지에서 Code 를 눌러 Download ZIP 을 해서 소스코드를 받는다.

    그러면 파일앱의 다운로드에 가면 ZIP 파일이 있는데 이것을 압축을 풀어준다.

    그리고 Pythonista 3 을 다운로드 받으면 파일에서 iCloud 에 Pythonista 3 폴더가 생기는데 여기로 압축을 푼 파일을 넣어준다.

    이제 핫스팟을 켠 다음 Pythonista 3 를 실행해서 socks5.py 를 실행해 주면 된다.

    이제 맥에서 연결을 해 보겠다.

    우선 IP를 수동으로 설정해 줘야 하니 나중에 편하게 바꿀 수 있게 위치를 추가해 줄 것이다.

    설정 > 네트워크 > … > 위치 > 위치 편집 으로 들어간다.

    + 버튼을 눌러 위치를 새로 생성해 준다 나는 iPhone Hotspot 으로 설정했다.

    이제 Wi-Fi 로 가서 아이폰 핫스팟을 연결한다.

    세부사항 > TCP/IP 로 들어간다.

    IPv4 구성을 수동으로 바꾸고 IP 주소를 172.20.10.X 서브넷 마스크를 255.255.255.0 으로 설정한다. 여기서 X는 2-254 사이의 숫자를 입력하면 된다.+20250420

    그다음 프록시로 가서 SOCKS 프록시를 켜주고 아이폰에 나오는 SOCKS Address 를 입력해 주면 된다 기본값은 서버 172.20.10.1 에 포트 9876 일것이다.

    이렇게 설정하면 끝이다.

    맥에서 웹사이트나 유튜브 등을 보면 아이폰의 프록시 서버를 통해서 통신해서 공유데이터 사용량에 집계가 안된다.

    허나 단점이 있는게.

    • 앱을 계속 실행하고 있어야 한다. 다행히도 실행하는 동안 화면이 꺼지지는 않는다.
    • 모든 트래픽이 우회 되는 것은 아니다. 실험해 보니 디스코드는 안된다.+20250408

    그래도 이 정도면 쓸 만하다고 생각한다.

    참고로 단축어에 등록을 해서 탭하면 핫스팟이랑 프록시 서버가 자동으로 켜지게끔 해 둘 수 있다.

    필요한 사람은 아래에 단축어 링크를 올렸으니 참고 바란다.

    핫스팟 단축어

    === 2025-03-07 추가내용 ===

    아이폰을 유선으로 테더링 하면 IP 주소를 수동으로 설정할 수가 없는데 터미널로 설정할 수 있다.

    sudo networksetup -setmanual "iPhone USB" 172.20.10.X 255.255.255.0

    X 값에 2-254 사이의 원하는 숫자를 넣어준다 (다른 기기와 겹치면 안된다)+20250420

    sudo networksetup -setsocksfirewallproxy "iPhone USB" 172.20.10.1 9876
    sudo networksetup -setautoproxyurl "iPhone USB" http://172.20.10.1:8088/wpad.dat

    첫번째 줄은 SOCKS5 프록시를 설정하는것이고

    두번째 줄은 자동 프록시 구정을 설정하는 것이다.
    이 값을 설정을 안하면 파이어폭스에서 인터넷이 안 되길래 설정했다.

    sudo networksetup -setproxybypassdomains "iPhone USB" localhost,.local,127.0.0.1,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8

    위 설정은 프록시 설정값을 우회(bypass)할 호스트를 설정한 것이다.

    === 2025-04-08 추가내용 ===

    디스코드 같은 트래픽도 우회 시킬 수 있는 방법이 있다.

    NordVPN 같은 VPN 서비스를 사용하면 VPN 을 수동으로 연결할 수 있는데

    OpenVPN Connect 같은 앱을 깔아서 수동으로 VPN 구성을 추가해 준 다음 프록시를 아이폰의 프록시서버로 설정해 주면 된다.

    그러면 대부분의 트래픽은 프록시 서버로 통신하고 나머지 트래픽도 프록시 서버를 통해 VPN으로 통신한다.

    === 2025-04-20 추가내용 ===

    아이폰 핫스팟의 서브넷 마스크는 255.255.255.240 이다.

    따라서 네트워크 설정할 때 서브넷 마스크를 255.255.255.240 (네트워크 식별자 길이: 28)으로 설정하고 IP주소는 172.20.10.2 – 172.20.10.14 의 값을 입력해야 한다.

    이 포스트는 SKT + 아이폰15 기준으로 작성되었다. 다른 통신사는 안되는 것 같다고 하는데. 나중에 지인 폰으로 테스트 해 보고 내용을 추가해 보겠다.

  • Docker Swarm 써 보기

    요즘 Kubernetes를 많이 들어본다

    Kubernetes란 Docker 같은 컨테이너를 종합적으로 관리해 주는 것인데 이게 요긴하게 쓰인다고 한다.

    근데 Kubernetes는 너무 어렵다.

    그래서 Docker Compose를 쓰던 나는 이것에 익숙한 Docker Swarm이란걸 써 보기로 했다.

    우선 3개의 가상머신에 우분투 서버를 설치해 줬다.

    2개는 서버 컴퓨터에 1개는 시놀로지에 깔았다.

    우선 Docker Swarm이 사용할 공유 스토리지를 만들어 줘야 한다.

    Ceph 가 그 중에 하나인데 우분투에서 지원하며 설정하기 편한 microceph를 사용해 보겠다.

    우선 각각의 VM에 microceph를 설치해 준다

    sudo snap install microceph

    그 다음 마스터가 될 컴퓨터에 클러스터를 만들어 준다.

    sudo microceph cluster bootstrap

    그 다음에 새로운 노드를 추가할 준비를 한다.

    sudo microceph cluster add cm-server-2

    cm-server-2 자리에 원하는 이름으로 넣어주면 된다.

    그러면 토큰 값이 나오는데 그 토큰 값을 가지고 다음 명령어를 추가할 컴퓨터에서 실행한다.

    sudo microceph cluster join <토큰값>

    그 다음에 각각의 컴퓨터에 저장소로 사용할 빈 공간이 필요하다. 이 빈공간을 ceph 스토리지에 추가해 준다.

    나는 우분투 설치할 때 15기가 짜리 볼륨을 만들어 두었다. 그걸 사용하겠다.

    sudo microceph disk add /dev/mapper/ubuntu--vg-data--lv --wipe

    이제 모든 노드가 추가 되었는지 확인한다.

    sudo microceph status

    위 명령어를 실행했을 때 추가한 노드가 다 생기면 정상이고

    sudo ceph status

    위 명령어를 실행했을 때 HEALTH_OK가 뜨면 정상이다.

    이제 만든 이 스토리지에 풀을 만들고 마운트를 해 줄것이다.

    우선 메인 컴퓨터에 와서 풀 부터 만들어 준다.

    sudo ceph osd pool create cephfs_meta
    sudo ceph osd pool create cephfs_data

    이제 CepfFS 공유폴더를 만들어 준다.

    sudo ceph fs new <공유폴더이름> cephfs_meta cephfs_data
    sudo ceph osd pool set cephfs_data bulk true

    아래 명령어를 입력했을때 추가한 공유폴더가 보여야 한다.

    sudo ceph fs ls

    이제 만든 공유폴더를 마운트 해 줄것이다.

    각각의 컴퓨터에서 설정해 주어야 한다.

    우선 ceph-common 패키지를 설치해 줄것이다

    sudo apt install ceph-common

    그다음에 ceph-common과 snap의 ceph를 연결해 줄것이다.

    sudo ln -s /var/snap/microceph/current/conf/ceph.keyring /etc/ceph/ceph.keyring
    sudo ln -s /var/snap/microceph/current/conf/ceph.conf /etc/ceph/ceph.conf

    이제 마운트할 폴더를 만들고 마운트 해 주면 된다.

    sudo mkdir /mnt/data
    sudo mount -t ceph :/ /mnt/data/ -o name=admin,fs=<공유폴더이름>

    이제 임시로 파일을 만들어 주면 모든 컴퓨터에 파일이 똑같이 생기는 걸 볼 수 있다.

    sudo dd if=/dev/zero of=/mnt/data/random.img count=1 bs=50M

    이제 자동 마운트를 설정해 줄 것이다.

    보통은 /etc/fstab 파일을 수정하는데 이러면 종종 오류가 발생하므로 microceph가 실행된 후에 마운트하도록 서비스로 만들어 줄 것이다.

    다음 명령어를 써서 서비스 파일을 만들어준다.

    sudo nano /etc/systemd/system/mount-data.service

    파일 안에 다음 내용을 넣어주고 저장한다.

    [Unit]
    Description=Mount CephFS after MicroCeph is loaded
    After=snap.microceph.daemon.service network-online.target
    Requires=snap.microceph.daemon.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/mount -t ceph :/ /mnt/data -o name=admin,fs=<공유폴더이름>
    ExecStop=/bin/umount /mnt/data
    
    [Install]
    WantedBy=multi-user.target

    그다음 이 서비스를 시작시에 실행하도록 한다.

    sudo systemctl enable mount-data.service

    이제 공유 스토리지는 다 만들었으며 이제 본격적으로 Docker Swarm을 설정할 것이다.

    우선 모든 컴퓨터에 docker 부터 설치해 준다.

    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    sudo usermod -a -G docker $USER

    그 다음에 메인 컴퓨터에서 Swarm을 활성화 해 준다.

    docker swarm init

    이렇게 하면 노드를 추가할 수 있는 토큰이 나오지만 나는 한쪽이 죽어도 살릴 수 있는 매니저 노드를 추가할 것이다.

    다음 명령어를 사용해 토큰을 발급해 준다.

    docker swarm join-token manager

    이제 여기서 나온 명령어(토큰값)를 가지고 나머지 컴퓨터에 실행해 준다.

    docker swarm join --token <토큰값>

    이러면 Docker Swarm의 설정은 끝이 났고 이제 관리하게 편하게 Portainer를 설치해 줄 것이다.

    다음 명령어를 실행해 Portainer 설정을 다운 받는다.

    curl -L https://downloads.portainer.io/ce-lts/portainer-agent-stack.yml -o portainer-agent-stack.yml

    나는 Dokcer 볼륨을 안 쓰고 아까 만든 공유 스토리지를 쓸 것이기에 파일을 수정해 줄 것이다.

    version: '3.2'
    
    services:
      agent:
        image: portainer/agent:lts
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - /var/lib/docker/volumes:/var/lib/docker/volumes
        networks:
          - agent_network
        deploy:
          mode: global
          placement:
            constraints: [node.platform.os == linux]
    
      portainer:
        image: portainer/portainer-ce:lts
        command: -H tcp://tasks.agent:9001 --tlsskipverify
        ports:
          - "9443:9443"
          - "9000:9000"
          - "8000:8000"
        volumes:
          - /mnt/data/portainer/data:/data
        networks:
          - agent_network
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints: [node.role == manager]
    
    networks:
      agent_network:
        driver: overlay
        attachable: true

    Portainer 볼륨을 없애고 data를 아까만든 CephFS 스토리지에 저장하게끔 했다.

    그리고 이제 아래 명령어를 실행해 주면 된다.

    docker stack deploy -c portainer-agent-stack.yml portainer

    그러면 이제 모든 설치가 끝났다.

    이제 추가한 노드들 중의 하나의 ip 주소로 접속하면 Portainer 설정 페이지를 볼 수 있다

    https://192.168.10.101:9443

    셋 중의 하나가 죽으면 그 IP로는 접속을 못하기 때문에 이제 가상IP 설정을 해서 고정된 IP로 접속할 수 있게 해야 한다

    그래서 나는 keepalived를 사용할 것이다.

    우선 모든 노드에 keepalived를 설치해 준다

    sudo apt install keepalived

    그다음에 /etc/keepalived/keepalived.conf 파일만들어 준다

    global_defs {
       notification_email {
         [email protected]
       }
       router_id SWARM_HA
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens18
        virtual_router_id 51
        priority 200
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass your-password
        }
        virtual_ipaddress {
            192.168.10.5
        }
    }
    
    virtual_server_group ALL_PORTS {
        192.168.10.5 1-65535
    }
    
    virtual_server 192.168.10.5 1-65535 {
        delay_loop 6
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.10.101 1-65535 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.10.104 1-65535 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.10.51 1-65535 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                retry 3
                delay_before_retry 3
            }
        }
    }
    

    위에서 파란색으로 칠한 부분을 자신의 상황에 맞게 수정하면 되겠다.

    이제 설정한 가상 IP로 접속하면 어느 노드가 죽어도 Docker Swarm에 접속할 수 있다.

  • 팩스서버 만들기

    팩스 서버가 만들고 싶어서 여러 방법을 시도 하다가 결국에는 Docker 이미지를 만들었다.

    내가 만든 도커 이미지로 팩스서버를 어떻게 여는지 알려주려고 한다.

    우선 서버를 열 폴더를 하나 만들어 준다.

    그리고 그 폴더에 docker-compose.yml 파일을 만들어 준다

    그리고 파일 내용을 아래와 같이 넣고 입맛에 맞게 수정해 준다.

    services:
      hylafax:
        image: minichip/hylafax
        container_name: hylafax
        privileged: true
        volumes:
          - ./config:/etc/hylafax
          - /mnt/fax/inbox:/var/spool/hylafax/recvq
          - /mnt/fax/send:/tmp/faxsend
        environment:
          - SIPADDR=server-address #서버주소
          - SIPUSER=username #SIP계정
          - SIPPASS=password #SIP비밀번호
    

    /etc/hylafax 폴더는 hylafax의 설정이 저장되는 위치이다

    /var/spool/hylafax/recvq 는 팩스가 수신될 때 저장되는 위치이다.

    /tmp/faxsend 는 보낼 팩스를 임시로 저장하는 곳이다.

    위 위치들을 원하는 위치에 매핑해 주고 인터넷 전화 SIP 계정 정보를 자신의 SIP계정으로 설정해 준다.

    나는 NAS에 /mnt/fax 를 마운트 해서 팩스를 나스를 통해 주고 받을 수 있도록 했다.

    파일을 저장해 주고 다음 명령어를 실행해 준다.

    docker-compose.up -d

    이제 서버가 만들어졌다.

    사용 방법은 팩스를 수신하면 /var/spool/hylafax/recvq 에 저장이 되고

    /tmp/faxsend 에 전화번호를 파일 이름으로 해서 (예: 0212345678.pdf)

    저장하면 일정 시간이 지나면 보내진다. 보낼 수 있는 파일 타입은 pdf tiff 파일이 있다.

    요즘 팩스도 거의 안 쓰는 마당에 이게 필요한 사람이 있나 싶지만 아무튼 설치하려다 어려운 점이 있으면 댓글, 쓰다가 개선이 필요한 점이 있으면은 아래 깃허브 링크로 제보 바란다.

    https://github.com/minichip3/hylafax-docker