Hi,

I've a usecase with OpenVPN and NAT with UDP where the commercial firewall changes NAT binding. Keep alive is 30s, so short enough. Also float option doesn't help because it accepts packets but doesn't do the source port change. Details find below. This behaviour is reproduceable on different installations with this firewall.

Client:
IPClient..IP address client
SPoClient..Source port client

NAT:
IPNAT..IP address NAT
SPoNAT1..Source port NAT (before change)
SPoNAT2..Source port NAT (after change)

Server:
IPServer..IP address OpenVPN server

Client                              | NAT                            | Server
# From client                       |                                |
IPClient:SPoClient => IPServer:1194 | IPNAT:SPoNAT1 => IPServer:1194 | 
IPNAT:SPoNAT1 => IPServer:1194
# Answer from server                |                                |
IPClient:SPoClient <= IPServer:1194 | IPNAT:SPoNAT1 <= IPServer:1194 | 
IPNAT:SPoNAT1 <= IPServer:1194
# NAT changes source port NATing!!! |                                |
IPClient:SPoClient => IPServer:1194 | IPNAT:SPoNAT2 => IPServer:1194 | 
IPNAT:SPoNAT2 => IPServer:1194
# Answer from server to original source port!!!                      |
----BLOCKED BY NAT----              | ----BLOCKED BY NAT----         | 
IPNAT:SPoNAT1 <= IPServer:1194
# Suggested behaviour: On authenticated source port change remember  |
# the change, answer to new source port from NAT/client              |
IPClient:SPoClient <= IPServer:1194 | IPNAT:SPoNAT2 <= IPServer:1194 | 
IPNAT:SPoNAT2 <= IPServer:1194

Can the suggested behaviour be easily implemented (should be easily done in socket.c)?

I can try a patch if you want.

Thank you.

Ciao,
Gerhard

--
http://www.wiesinger.com/

Reply via email to