터널이 작동하고 작동하도록 DD-WRT 라우터에서 openvpn을 성공적으로 구성했지만 라우팅을 전혀 방해하지 않습니다(기본 구성에서는 모든 트래픽이 터널을 통과하기를 원합니다).
tun1의 포트 51413을 내 네트워크(192.168.77.145)의 특정 호스트로 포트 전달하고 싶습니다.
또한 tun1을 통해 라우팅되도록 포트 6881-6890을 가장해야 합니다. 여기에는 패킷 수정/표시 및 수동으로 라우팅 설정이 포함된다는 것을 알고 있지만 iptables를 고려한 지 12년이 되었습니다(그 당시에는 여전히 전화 접속이 있었던 것 같습니다).
내가 우연히 발견하지 못한 요리법이 인터넷에 있습니까?
[편집하다]
나는 tcpdump를 시도해 보았는데 내가 사용하고 있는 클라이언트(OSX에서의 전송)에 이상한 기능이 있는 것 같습니다. 이 클라이언트는 모든 나가는 패킷과 들어오는 모든 패킷 대상에 대해 소스 포트로 51413(사용자 구성 가능)을 사용합니다. tcpdump에서 포트 6881-6889를 찾아봐도 이 포트는 항상 원격 측의 소스 포트이며 항상 51413으로 전송됩니다.
그래서 생각보다 매우 간단했습니다. tun1 인터페이스를 통해 해당 src 포트 번호가 있는 모든 항목을 라우팅/가장하면 됩니다.
내 생각에 iptables 규칙은 다음과 비슷할 것 같습니다.
# mark bittorrent packets
iptables -t mangle -A OUTPUT -p udp --sport 51413 -j MARK --set-mark 7
iptables -t mangle -A OUTPUT -p tcp --sport 51413 -j MARK --set-mark 7
# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT
# block everything incoming on vpn
#iptables -A INPUT -i tun1 -j REJECT
# masquerading
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
이게 정상으로 보이나요? 아직도 라우팅 규칙을 모릅니다.
[편집 2]
나는 -A가 iptables 규칙의 끝에 추가되기 때문에 잘못된 것이라고 생각합니다. 내 라우터는 먼저 신이 무엇을 알고 있는지 추가하고 해당 규칙이 일치하면 해당 규칙이 무시됩니다. 나는 그들이 모두 -I여야 한다고 확신합니다.
이렇게 변경해도 아무 것도 작동하지 않습니다.
이 패킷은 내 개인 네트워크의 br0(브리지 인터페이스)에 표시됩니다. 아무것도 변경하지 않으면 DD-WRT 구성이 vlan2를 통해 NAT됩니다. 물론 OpenVPN의 인터페이스는 tun1입니다(이를 통해 bt 트래픽을 보내고 싶습니다).
[편집 3]
처음 두 개의 iptables 문이 올바르지 않습니다. 저는 작성자가 자신의 데스크탑을 라우터로 사용하는 예를 작업 중입니다(제 생각에는). 따라서 이는 데스크탑이 로컬 네트워크를 통해 두 개의 외부 인터페이스가 있는 라우터로 패킷을 보내는 것과는 다릅니다. 올바른 진술 세트는 다음과 같습니다.
# routing table setup
ip route replace default via $VPNGW dev tun1 table 100
ip rule add fwmark 7 table 100
# mark bittorrent packets
iptables -t mangle -I PREROUTING -p udp --sport 51413 -j MARK --set-mark 7
iptables -t mangle -I PREROUTING -p tcp --sport 51413 -j MARK --set-mark 7
# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT
# block everything incoming on vpn
iptables -A INPUT -i tun1 -j REJECT
# masquerading
iptables -t nat -I POSTROUTING -o tun1 -j MASQUERADE
이것은 아직 완벽하지 않습니다. 이제 대부분의 bt 트래픽은 tun1을 통과하지만 vlan2에는 여전히 51413의 수신 패킷이 표시됩니다. 왜 이런 일이 발생하는지 잘 모르겠습니다.