리눅스로 NAT머신(공유기) 만들어 돌리시는 분들 참고하세요. 최근버전 커널 쓰시는분들
하스웰 i3 쓰다 답답하다 못해 스카이레이크 i5를 샀습니다. ssd에 스왑 잡기가 그래서 메모리를 16기가 4개 샀고요 ㅎㅎㅎ
여기에 맞춰서 젠투를 새로 빌드했는데.
바꾸는 녀석은 집안 유무선 공유기로도 돌아가는 녀석이라(보드내장유선+인텔유선랜카드+입타임무선랜카드) 이전처럼 NAT 세팅을 하는데 작동을 안하는 겁니다.
한참 삽질하다가 원인을 찾았습니다.
보통 라우팅 테이블에 따른 static routing을 하기 위해서는 /proc/sys/net/ipv4/ip_forward 에 "1"만 넣어주면 끝이었는데,
최근 커널에서는 /proc/sys/net/ipv4/conf/ 아래에 랜카드 인터페이스명이 디렉토리로 나오고
이 각각마다 또 안에 forwarding 이라는 파일이 있어 이것도 "1"로 바꿔줘야 합니다.
안하면 ip_forward를 "1"로 바꾼게 아무 효과 없습니다.
일례로 NAT용 머신에 랜카드가 eth0, eth1이 있다면 해당 파일은 다음과 같이 됩니다. 이들까지 다 "1"로 넣어주셔야 합니다.
eth0일 경우 /proc/sys/net/ipv4/conf/eth0/forwarding
eth1일 경우 /proc/sys/net/ipv4/conf/eth1/forwarding
이 기능이 어느때부터 추가되었는지 아시는분은 답글 달아주세요.
참고로 작년에 젠투 빌드할때 넣은 커널 4.2에서는 이거 없었고, 지금 쓰고 있는 4.6에서는 있습니다.
OpenVPN으로 tun 사설망 VPN서버 여럿 돌릴때 특정 VPN망 못보게 하는데는 좋을거 같은데 어느순간에 잠수함처럼 들어가버린건지.
CentOS 구버전에도 있는 걸 보니 최근커널에 새로
CentOS 구버전에도 있는 걸 보니 최근커널에 새로 추가된 것은 아닌 것 같습니다.
NAT, 패킷포워딩 등의 용으로 쓰는 컴인데,
설정시 /proc/sys/net/ipv4/conf/*/forwarding 을 따로 신경쓰지는 않았습니다.
값을 확인해보니 모두 1로 설정되어 있네요.
CentOS 7.2에서 실험해보니,
CentOS 7.2에서 실험해보니, /proc/sys/net/ipv4/ip_forward 을 조작하면
아래와 같이 /proc/sys/net/ipv4/conf/*/forwarding 값이 모두 변경되네요.
이렇게 모든 인터페이스 설정을 바꾸지 말고 인터페이스마다 따로 설정하려면
아래 페이지에 나오는대로 /proc/sys/net/ipv4/conf/*/forwarding 의 값을 각각 설정하면 되는 모양입니다.
https://wiki.archlinux.org/index.php/Internet_sharing#Enable_packet_forwarding
커널버전이 3.10이네요.커널을 4.5.x
커널버전이 3.10이네요.
커널을 4.5.x 이후버전으로 컴파일해서 돌려보시는게 어떨까요?
4.2까지 /proc/sys/net/ipv4/ip_forward만 1로 넣으면 포워딩 잘 되는거 확인했습니다. NAT 구성도 그대로 됐고요.
4.5.3에서 제가 쓴 이 증상 나타나서 혹시나 해서 4.6까지 올렸는데도 똑갈아서 삽질하다보니까 알아낸거고요.
4.5.x 올린 후에 발생했다면 커널의 포워딩 정책이 바뀐거고
4.5.x 이후로 올렸는데도 발생하지 않았다면 이 옵션에 영향을 미치는 systemd나 다른 프로그램들이 있는지 찾아봐야 할 듯 합니다.
Written By the Black Knight of Destruction
제가 확인한 것은,
제가 확인한 것은,
/proc/sys/net/ipv4/conf/*/forwarding 이 최신버전의 커널에서 새로 나타난 것은 아니라는 것입니다.
위 댓글에 밝힌대로 CentOS의 2.6, 3.10 버전 커널에도 이미 존재하고 있었고, 댔글에 적지는 않았지만 우분투 16.04의 4.4 버전 커널에도 있었습니다.
그 가운데 3.10 커널에서 해보니, /proc/sys/net/ipv4/ip_forward 만 조작하면 /proc/sys/net/ipv4/conf/*/forwarding 는 일괄설정되는 모습이 관찰된 것이고, 간단히 구글 검색해보니 인터페이스별로 설정하려면 /proc/sys/net/ipv4/conf/*/forwarding 을 따로 설정하라는 안내자료가 나온 것입니다.
최신버전의 커널에서는 /proc/sys/net/ipv4/ip_forward을 조작해도 /proc/sys/net/ipv4/conf/*/forwarding 이 일괄설정되지 않게 바뀌었을 수도 있겠지만, 어쨌든 /proc/sys/net/ipv4/conf/*/forwarding 자체는 최근에 새로이 정의된 것이 아니며 이를 이용한 인터페이스별 포워딩 켜기/끄기 설정도 새로 나온 얘기는 아닌 것 같습니다.
제가 쓰는 업무용/시험용 리눅스 PC 중에는 4.5 이후 버전의 커널을 쓰는 PC는 없습니다. 내일 출근하면 4.4버전 커널에서 같은 실험을 해 보겠습니다.
.. 그냥 PC를 잠시 켤걸, 휴대폰으로 적으려니 힘들군요..
4.4 버전 커널에서도
4.4 버전 커널에서도 /proc/sys/net/ipv4/ip_forward 를 조작하면
/proc/sys/net/ipv4/conf/*/forwarding 도 모두 일괄변경되네요.
제가 관리하는 시스템에는 4.5 이후의 커널이 없어서 여기까지만 해봅니다.
전에 VirtualBox에 설치해본 Arch
전에 VirtualBox에 설치해본 Arch Linux가 생각나서 부팅하고 시스템을 업데이트해보니 커널 버전이 4.5.4네요.
이 버전에서도 /proc/sys/net/ipv4/ip_forward을 조작하면 아래와 같이 /proc/sys/net/ipv4/conf/*/forwarding 도 일괄변경되었습니다.
이번에 겪으신 일은 커널 버전에 따른 현상이 아닌, sysctl 설정과 관련된 다른 프로그램들에 의한 것이 아닐까 추측해 봅니다.
그렇다면 커널 옵션이나 다른 프로그램들을
그렇다면 커널 옵션이나 다른 프로그램들을 찾아봐야겠네요. 감사합니다.
Written By the Black Knight of Destruction
좀 뒤져보니 이 증상을 일으킨 범인은
좀 뒤져보니 이 증상을 일으킨 범인은 systemd-networkd였습니다.
systemd-networkd 설정을 보니 IPMasquerade나 기타 NAT 관련 설정들이 몇개 있었습니다. 기본값은 사용안함입니다.
말씀하신대로 /proc/sys/net/ipv4/ip_forward 파일을 1로 바꾸면 conf/<랜카드명>/forwarding 파일도 같이 1로 바뀌는데
systemd-networkd 설정에 집어넣은 interface마다 다 0으로 바뀌더군요. 1로 해놔도 바로는 아니고 한 10분 주기... 로 바뀌는듯.
Written By the Black Knight of Destruction